Model View Presenter - 相同的视图,不同的演示者
Model View Presenter - same view, different presenters
我正在使用 MVP 构建一个 Android 应用程序,我对这种模式有一个疑问。
假设我有一个屏幕用于创建一个新人。此屏幕将显示一个 EditText
用于插入姓名,另一个用于姓氏,一个 ImageView
用于显示选择的照片图片等。
这将导致一个 View
接口,由 Fragment
实现。它将与一个 Presenter
接口合作,由另一个 class.
实现
很好。
现在我有另一个功能:编辑现有人物 的屏幕。
碰巧,此功能的 View
与创建新人的功能相同。但是,Presenter
不同。它将首先从数据库加载现有人员以使用当前数据预填充视图,单击 "save" 时对数据库的操作将是更新而不是插入。
所以,我认为这是 MVP 的一个示例 ,其中一个视图与演示器的不同实现一起工作以实现不同的用例。
你认为这是一个正确的假设,还是你认为不同的特征应该有不同的View
和Presenter
接口?
另外,如果你有一个共同的 View
和不同的 Presenters
,View
的实现是否是共同的,或者它会导致两个class实现的是同一个接口?实际上,我看到了两种选择。
只有一个 Fragment
实施 View
。根据用户是要创建新人还是更新现有人,Fragment 应该接收和使用不同的 Presenter。
有两个 Fragment
。每个人都会实例化一个不同的 Presenter
。使用组合或继承来避免两个片段之间的代码复制。
在这些情况下,您认为怎样做比较好?
谢谢。
当您在 Android 上使用 MVP 模式创建类似 CRUD 的应用程序时,您将 运行 参与其中。
您可以很容易地只拥有单一视图,只要您在 class 中很好地记录它为两个不同的演示者实现 'view',那么它 'is okay'
我个人建议创建 2 个视图,一个用于 'create',一个用于 'edit'(它们可能是相同的(目前),但将它们分开可以清楚地表明它们 - 是 -不同的东西。)
您可以很容易地看到未来的情况(或此模式的另一个含义),其中您的 'create' 和 'edit' 视图实际上具有不同的 API。或略有不同的视觉提示,例如一个标记为 'create/add' 的按钮和另一个标记为 'update' 的按钮。
我个人会制作一个 view-library/helper class 两个视图都从中提取逻辑。这应该可以帮助您减少整体 LoC,即使您制作了 2 'view' classes。这样做的好处是您可以轻松更改 Create/Edit 视图中的任何一个,而不必担心影响另一个视图。 (我倾向于认为 2 个视图文件在 Create/Edit 之间甚至存在 'slight' 差异时会更容易维护)
我正在使用 MVP 构建一个 Android 应用程序,我对这种模式有一个疑问。
假设我有一个屏幕用于创建一个新人。此屏幕将显示一个 EditText
用于插入姓名,另一个用于姓氏,一个 ImageView
用于显示选择的照片图片等。
这将导致一个 View
接口,由 Fragment
实现。它将与一个 Presenter
接口合作,由另一个 class.
很好。
现在我有另一个功能:编辑现有人物 的屏幕。
碰巧,此功能的 View
与创建新人的功能相同。但是,Presenter
不同。它将首先从数据库加载现有人员以使用当前数据预填充视图,单击 "save" 时对数据库的操作将是更新而不是插入。
所以,我认为这是 MVP 的一个示例 ,其中一个视图与演示器的不同实现一起工作以实现不同的用例。
你认为这是一个正确的假设,还是你认为不同的特征应该有不同的
View
和Presenter
接口?另外,如果你有一个共同的
View
和不同的Presenters
,View
的实现是否是共同的,或者它会导致两个class实现的是同一个接口?实际上,我看到了两种选择。只有一个
Fragment
实施View
。根据用户是要创建新人还是更新现有人,Fragment 应该接收和使用不同的 Presenter。有两个
Fragment
。每个人都会实例化一个不同的Presenter
。使用组合或继承来避免两个片段之间的代码复制。
在这些情况下,您认为怎样做比较好?
谢谢。
当您在 Android 上使用 MVP 模式创建类似 CRUD 的应用程序时,您将 运行 参与其中。
您可以很容易地只拥有单一视图,只要您在 class 中很好地记录它为两个不同的演示者实现 'view',那么它 'is okay'
我个人建议创建 2 个视图,一个用于 'create',一个用于 'edit'(它们可能是相同的(目前),但将它们分开可以清楚地表明它们 - 是 -不同的东西。)
您可以很容易地看到未来的情况(或此模式的另一个含义),其中您的 'create' 和 'edit' 视图实际上具有不同的 API。或略有不同的视觉提示,例如一个标记为 'create/add' 的按钮和另一个标记为 'update' 的按钮。
我个人会制作一个 view-library/helper class 两个视图都从中提取逻辑。这应该可以帮助您减少整体 LoC,即使您制作了 2 'view' classes。这样做的好处是您可以轻松更改 Create/Edit 视图中的任何一个,而不必担心影响另一个视图。 (我倾向于认为 2 个视图文件在 Create/Edit 之间甚至存在 'slight' 差异时会更容易维护)