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
的任何地方重复使用此静态方法