我有一个Flight
类,除了包含许多包含特定商业航班详细信息的变量之外,它目前没有其他功能。
这些细节中的大多数只是通过构造函数传递,但其中一些需要计算或格式化。例如,我将航班到达时间格式化为一个字符串"6th June"
,有时候初始航班数据中缺少机场名称,因此我使用airportcodes
和airportnames
数组来查找机场名称。
计算此附加信息的方法是否应位于航班类或一系列其他模型中,例如DateProcessor
或Airport
?
答案 0 :(得分:2)
Chris K正确地指出了石蕊试验,即当你需要做出改变时;你需要改变多少个地方。
OOP概念鼓励解耦和modular programming以最大化代码重用。
key is high cohesion and low coupling
。请参阅此Cohesion & Coupling
如果您想要获得额外的航班详情 从Flight类变量只需要一个活动,现在 还有其他的地方。然后可以在我们的活动中使用这些功能。
但是,如果其他活动或类可能需要这些功能 目前或将来可能需要。然后,将这些功能放在您的 飞行班
理想情况下,最好的OOP是保留这些从飞行类本身中的Flight类变量中获取细节的函数。因为,如果不是现在,你将能够重新使用代码,后者将来也是如此。我也将建议相同。
另外,如果你使用Flight类的多个实例,你应该放置所有访问和修改Flight类中的类变量的函数,以保持每个实例的数据一致性。
如果你坚持使用OOP编程技术,那么维护代码会更容易,因为会有更多的代码重用并且没有重复的代码。
面向对象编程有四个主要原则:
数据抽象
封装
继承
多态性
P.S:可以参考http://en.wikipedia.org/wiki/Object-oriented_programming
答案 1 :(得分:0)
将登录,数据和用户界面分开是完全正常的。例如,JavaBeans是具有存储数据的类的惯例。阅读更多here。 MVC允许类似的逻辑,即View是根据数据创建的,取自Model,Controller更新数据。
答案 2 :(得分:0)
良好的类设计封装数据并提供访问该数据的方法。在你的情况下,你应该问自己"所有相关的数据" ...想想如果我有一组员工,我会将这些数据提供给其中一个以便记住,或者将数据分区并将其部分分配给不同员工的数量更有意义。
您已经识别出应该放入一个类的数据,因此将那些数据作用于该类的方法也是合乎逻辑的。
MCV设计模式很灵活,但我觉得这里过于苛刻。