Answers:
您的老师所指的概念是“关注分离”。
为了说明您的情况,请先完成程序,然后再决定将其移植到Android。与将网格逻辑分开分开相比,您将不得不重写更多的代码。
接口控件应该只关注绘制的内容,网格逻辑应该只关注网格中的内容,而不是如何绘制它。
这有帮助吗?
将关注点分离应用于应用程序结构时,结果是多层体系结构(或N层体系结构)http://en.wikipedia.org/wiki/Multitier_architecture。
要以其他答案为基础并举一个例子,您应该以某种方式让自己将逻辑/数据注入到网格中,反之亦然。
您的网格控件可以公开一个Render
方法或一个DataBind
方法。
class GridControl
{
public Render(GridData data) { ... }
}
要么
class GridControl
{
public DataBind(GridData data) { ... }
}
然后,您的逻辑单元可以采用GridControl并将数据对象绑定到它,或者在每次发生任何更改时使用该数据对象手动调用render。
您的GridLogic还应该引用GridControl,以便它可以绑定到发生的任何输入/事件。
数据绑定背后的想法是,网格控件监视数据是否有任何更改并重新呈现自身,因为公开呈现功能意味着您的逻辑单元手动重新呈现控件。
无论哪种方式,您都可以通过这样拆分逻辑和网格的方式来更轻松地更改另一个,而不破坏任何内容。您也可以编写一个新的控件(如),ListControl
以将数据显示为列表而不是网格,而不必重写所有逻辑。
这取决于您预期会发生的未来更改的种类。您想要最小化的是正确实现每个单个功能更改所需的手动代码更改数量。
如果更改仅限于V部分或“视图”,则MVC胜出之处。
以我的经验,变更影响所有三个部分的可能性更大,因此最好不要将它们分开。为了说明我的意思,我长期以来一直使用一种称为“ 动态对话框”的技术,在该技术中,将一个新要求(例如“允许用户编辑名称,并在完成时执行XYZ”)作为一个单独的块输入到源代码中。文本:
if(deTextEdit(&sName)){
// do XYZ
}
而不是进行多个单独的编辑,而是指定编辑字段存在,为其构成唯一标识符,将其绑定到模型变量并将其链接到失去焦点事件处理程序。
如果您转到该链接,您将看到一个更复杂的示例。
基本上,该想法是将代码转换为特定领域的语言,以便最大程度地减少实现目标的编辑次数。您这样做的原因不仅是要减少工作量,而且还要通过忘记或错误编码一个或多个编辑来减少引入错误的机会。它还将源代码的大小减少了大约一个数量级。
它不是免费的。它为程序员介绍了一次性的学习曲线。