我尝试使用model–view–controller(MVC)和model–view–presenter设计模式进行android开发.我的发现是模型 – 视图 – 控制器工作正常,但有一些“问题”.这一切都归结为你如何看待Android Activity类.它是一个控制器,还是一个视图?

实际的Activity类不会扩展Android的View类,但它会处理向用户显示窗口并处理该窗口的事件(onCreate,onPause等).

这意味着,当您使用MVC模式时,您的控制器实际上将是一个伪视图控制器.因为它正在处理向用户显示窗口,所以使用setContentView添加了其他视图组件,并且还至少处理各种活动生命周期事件的事件.

在MVC中,控制器应该是主要的入口点.如果在将其应用于Android开发时就是这种情况,这有点争议,因为活动是大多数应用程序的自然切入点.

因此,我个人发现模型 – 视图 – 演示者模式非常适合Android开发.由于视图在此模式中的作用是:

>作为切入点

>渲染组件

>将用户事件路由到演示者

这允许您像这样实现您的模型:

视图 – 它包含您的UI组件,并为它们处理事件.

演示者 – 这将处理模型和视图之间的通信,将其视为模型的网关.意思是,如果你有一个复杂的领域模型代表,上帝知道什么,你的视图只需要这个模型的一个非常小的子集,演示者的工作是查询模型,然后更新视图.例如,如果您的模型包含文本段落,标题和字数.但在给定视图中,您只需要在视图中显示标题.然后,演示者将从模型中读取所需的数据,并相应地更新视图.

模型 – 这基本上应该是您的完整域模型.希望它有助于使您的域模型更加“紧密”,因为您不需要特殊的方法来处理上面提到的案例.

通过将模型与视图一起解耦(通过使用演示者),测试模型也变得更加直观.您可以为您的域模型进行单元测试,并为演示者进行单元测试.

试试看.我个人认为它非常适合Android开发.