尽管我从未使用Smalltalk交付过任何东西,但我短暂的使用时间肯定已经留下了印记。描述体验的唯一方法是按原样应有的MVC。本质上,对您的应用程序而言,所有繁重的工作都是在业务对象中完成的(如果您愿意,也可以在域模型中完成)。标准控件以某种方式绑定到业务对象。例如,一个文本框被映射到一个对象的字段(该字段本身是一个对象,因此很容易做到)。一个按钮将映射到一个方法。所有这些都是通过非常简单自然的API完成的。我们不必考虑绑定对象等。它可以正常工作。
但是,在许多更新的语言和API中,您不得不从外部进行思考。首先使用C ++和MFC,现在使用C#和WPF,Microsoft已将其开发人员吸引到GUI生成器上,在其中可以通过实现事件处理程序来构建应用程序。Java Swing开发并没有什么不同,只有您自己编写代码以实例化表单上的控件。对于某些项目,甚至可能永远都没有域模型-只是事件处理程序。我的大部分职业都在使用该模型。
每种方式都会迫使您以不同的方式思考。使用Smalltalk方法,您的域很聪明,而GUI却很笨。使用默认的VisualStudio方法,您的GUI会很聪明,而域模型(如果存在)则很贫乏。
与我合作的许多开发人员看到了Smalltalk方法的价值,并试图将这种方法引入VisualStudio环境。WPF具有一些动态绑定功能,这使其成为可能。但是有局限性。不可避免地,属于域模型的某些代码最终会出现在GUI类中。
那么,您采用哪种方式设计/开发代码?为什么?
- GUI首先。用户交互至关重要。
- 域优先。在我们将UI放到系统上之前,我需要确保系统是正确的。
两种方法都有优点和缺点。Domain模型适合在那里放置水晶大教堂和空中馅饼。GUI非常适合快速且肮脏的(有时确实很肮脏)。
还有一个额外的好处:如何确保代码可维护?