如果模型类包含其参数是 View 对象的实例的静态方法,是否违反了 MVC 模式的关注点分离?


public static Intent prepare( EditText to, EditText cc, EditText subject, EditText content ){
Intent preparedIntent = new Intent( Intent.ACTION_SEND );
preparedIntent.setType( "plain/text" );
preparedIntent.putExtra(Intent.EXTRA_EMAIL, new String[ ] 
{ 
    to.getText().toString( )
});
preparedIntent.putExtra(Intent.EXTRA_CC, new String[ ]
{
cc.getText( ).toString( )
});
preparedIntent.putExtra(Intent.EXTRA_SUBJECT,subject.getText().toString());
preparedIntent.putExtra(Intent.EXTRA_TEXT,content.getText().toString());
return preparedIntent;}

如果一个模型类包含一个参数是View对象实例的静态方法,这是否违反了MVC模式的关注点分离

如果我选择在我的Email.java类中提供一个静态助手方法,用于在电子邮件客户端活动类的范围内返回意图的实例,我正在尝试研究是否MVC模式的关注点分离的正确实现。我质疑这一设计决策的原因是,尽管意图不是View的实例,但我在Email.java(模型(类的范围内传递View对象的实例的对象。

因此假设我不符合MVC模式,是否会将参数类型更改为String,并让View的每个实例通过每次调用Email.reprepare(…..(方法时在参数构造中调用其viewObject.getText((.toString((来返回字符串类型的对象,然后通过适当的关注点分离来实现MVC模式的一致性

如果它能更好地帮助形成答案,这里有一个链接到代码。有问题的两个类是activities包中的EmailActivity.java文件和models包中的Email.java文件

感谢您提前提供意见。我只是对此感到好奇。这显然不是一个大问题,更为次要,但我正在努力学习设计模式。我知道一般的答案是"你就是设计师!"。

您的代码违反了一些公认的编码实践,但不一定是MVC。以下是我如何重新考虑它,使其为DRY并遵循LoD。

public static Intent prepare( String to, String cc, String subject, String content, String messageType )
{
    if (messageType==null){ messageType = "plain/text"; }
    Intent preparedIntent = new Intent( Intent.ACTION_SEND );
    preparedIntent.setType( messageType );
    if (to!=null) {
        preparedIntent.putExtra(Intent.EXTRA_EMAIL, new String[ ] 
        { 
            to
        });
    }
    if (cc!=null) {
        preparedIntent.putExtra(Intent.EXTRA_CC, new String[ ]
        {
            cc
        });
    }
    preparedIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    preparedIntent.putExtra(Intent.EXTRA_TEXT, content);
    return preparedIntent;
}

这样,您就不必引用特定类型的控件(EditText(,并且您可以在需要创建电子邮件Intent 的任何地方重复使用此静态方法

相关内容

最新更新