Model View Presenter - 相同的视图,不同的演示者

Model View Presenter - same view, different presenters

我正在使用 MVP 构建一个 Android 应用程序,我对这种模式有一个疑问。

假设我有一个屏幕用于创建一个新人。此屏幕将显示一个 EditText 用于插入姓名,另一个用于姓氏,一个 ImageView 用于显示选择的照片图片等。 这将导致一个 View 接口,由 Fragment 实现。它将与一个 Presenter 接口合作,由另一个 class.

实现

很好。

现在我有另一个功能:编辑现有人物 的屏幕。 碰巧,此功能的 View 与创建新人的功能相同。但是,Presenter 不同。它将首先从数据库加载现有人员以使用当前数据预填充视图,单击 "save" 时对数据库的操作将是更新而不是插入。

所以,我认为这是 MVP 的一个示例 ,其中一个视图与演示器的不同实现一起工作以实现不同的用例

  1. 你认为这是一个正确的假设,还是你认为不同的特征应该有不同的ViewPresenter接口?

  2. 另外,如果你有一个共同的 View 和不同的 PresentersView 的实现是否是共同的,或者它会导致两个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' 差异时会更容易维护)