Model view controller 如何向某人解释数据结构不应自行绘制,从而解释关注点的分离?
我有另一个程序员,我正试图解释为什么UI组件不应该也是数据结构 例如,假设您从“数据库”获得一个包含记录集的数据结构,并且希望在应用程序的UI组件中显示该记录集 根据这位程序员的说法(他还不知道姓名,他很年轻,我正在教他…),我们应该将数据结构子类化为一个类,该类将在我们的应用程序中绘制UI组件 因此,根据这个逻辑,记录集应该管理UI的绘图 ******总台***** 我知道要求记录集自己绘制是错误的,因为如果您希望在UI上的多个组件类型上呈现相同的数据结构,您的手上会有一团乱麻;您需要为从记录集的基类呈现的每个UI组件扩展另一个类 我很清楚MVC模式的“清洁度”(我的真正意思是不要将数据(模型)与UI(视图)或对数据执行的操作混淆)(控制器或多或少…好吧,API不应该真的处理这个问题…控制器应该尽可能少地调用它,告诉它要渲染哪个视图),但是它肯定比使用数据结构渲染UI组件更干净 除了上面的例子,我还有什么其他建议可以给他吗?我知道当你第一次学习OOP时,你会经历一个“阶段”,你只想扩展一切 然后是一个阶段,当你认为设计模式是解决每一个问题的方法…这也不是完全正确的Model view controller 如何向某人解释数据结构不应自行绘制,从而解释关注点的分离?,model-view-controller,oop,extend,separation-of-concerns,extends,Model View Controller,Oop,Extend,Separation Of Concerns,Extends,我有另一个程序员,我正试图解释为什么UI组件不应该也是数据结构 例如,假设您从“数据库”获得一个包含记录集的数据结构,并且希望在应用程序的UI组件中显示该记录集 根据这位程序员的说法(他还不知道姓名,他很年轻,我正在教他…),我们应该将数据结构子类化为一个类,该类将在我们的应用程序中绘制UI组件 因此,根据这个逻辑,记录集应该管理UI的绘图 ******总台***** 我知道要求记录集自己绘制是错误的,因为如果您希望在UI上的多个组件类型上呈现相同的数据结构,您的手上会有一团乱麻;您需要为从记录
有什么方法可以让我轻轻地把这个孩子推向正确的方向吗?你有没有更多的例子可以帮助我向他解释我的观点?你听说过马丁·福勒吗
无论如何,如果他想在向数据控件添加渲染方法的方向上走得更远,让他看看“松耦合”创建某种通用类型的界面可以让他走到一半,但UI组件应该走完剩下的路。这归结为功能性和非功能性的责任。数据结构的功能和可视化方式是两个完全不同的事情——本质上是MVC模式的根源
这里还有一个循环依赖的概念。由于UI必须了解数据结构,如果您允许数据结构依赖于UI,那么您就有了一个很好的小泥球。通常在解耦点上:
WebPerson
和DesktopPerson
对Person
进行子类化(这听起来已经错了,不是吗?命名根本不是关于人的类型,而是关于其他的东西)教师
和学生
。因此我们得到网络人
,网络教师
,网络学生
,桌面教师
,桌面教师
和桌面学生
WebPerson
定义了方法“drawAddressFields()”来绘制地址字段的web版本。但是由于WebTeacher
必须从Teacher
派生来使用附加数据字段“salary”(让我们假设单一继承),它必须再次实现“drawAddressFields()”
因此,也许“这将导致更多工作”的论点将有助于创造一些动机:-)
顺便说一句,它将自动导致创建一些实现drawAddressField()代码的委托,这将演变为创建一个独立于数据结构进行绘图的组件。功能性是指与UI的数据交互,而非功能性;只是数据的容器,如结果集……对吗?功能性如“某物做什么”,非功能性如“某物看起来如何”.在MVC中,“某物做什么”是模型,“某物看起来如何”是模型、视图的可视化。