sto*_*fln 9 mvp android design-patterns software-design
最近我接手了一个建立在MVP之上的android项目.虽然简单的屏幕非常简单,易于阅读和维护,但应用程序中更复杂的部分却不是.多个继承级别导致我在类之间切换几天,试图找出信息流实际上是如何工作的.
这里是一个更有问题的层次结构的例子:
由于我们使用MVP,因此图中的每个类自然会有另一个presenter类和另一个视图类.
所以我做了一些研究并发现了这篇文章: MVP中的组合与继承 ,它基本上说在这种情况下组合应该优于继承.不说的是如何在android中应用它.我想了一会儿,但不能想出一个漂亮的模式.我可以做自定义视图,但他们最终会如何使用演示者?
继承尽管非常强大,但很容易被滥用,当不可避免的情况发生时,即需求的变化时,由于其缺乏灵活性,继承很容易打破开放原则.程序员必须修改现有的类,这反过来会破坏客户端代码.这就是为什么组合通常比继承更受青睐的原因.它为不断变化的需求提供了更大的灵
这个设计原则恰恰说明了:
继续讨论你的问题,我在阅读你的问题后首先想到的是:为什么不使用策略模式!
您可以采取的方法是:
BaseMapViewFragment将包含所有派生类共有的所有代码.为不同类型的行为(不同的行为)设置单独的接口.您可以根据自己的要求创建具体的行为类.将这些行为接口作为类字段引入BaseMapViewFragment.现在扩展的类BaseMapViewFragment将使用具体的行为类初始化所需的行为.
无论我在上一段中说过什么都可能令人困惑(我的英语也不是那么好:D),但我刚才解释了战略模式的工作,仅此而已.
这里还有另一个设计原则:
我也遇到过类似的情况。我最终所做的是将“Base”中的功能取出到单独的类中,然后将其用作组合。它还与以类似结构使用地图有关。
您可以创建一个新类MyAppMapView,它可以扩展 a FrameLayout(或任何最适合您的布局的类)。这可以包含所有与 Map 相关的代码(包括 MapView),您可以在此处拥有自定义 MapView 相关函数,例如onStart()、onResume()、onPause()、onStop()。此外,您可以将与地图相关的所有内容放在这里,例如标记、线条等。
一旦你完成了它,你就可以在你的和中使用new MyAppMapView()(或使用 com.example.MyAppMapView 将其添加到 xml 中),并且由于这两个类都将组成你的自定义类,所以你可以从 Fragments 中调用所有与地图相关的函数,例如绘图标记、线条、onStart() 等。MapViewSimpleFragmentMapViewDetailsFragmentMyAppMapView
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |