数据共享问题--还是MVC

原创 2007年09月21日 09:53:00
        以前在使用VC的时候,常常会看到Document/View的模型。那时候就知道他是MVC的一个变种。后来不断的看到有人MVC。但是其实我一直没有具体体会过MVC的好处。因为我们很少会重新设计界面或者重新实现数据模型。我们做的都是具体项目。不是产品也不是通用工具。
        但是 最近的项目中就遇到了一个问题。仔细想了一下发现这就是MVC的一个经典应用。我们通常认为MVC中的V是视图,这是大家都知道的。但是还有一个误解那就是V表示界面。这个误解常常使得我在设计系统的时候想不起MVC来。现在终于要改变这个观念了。V其实就是M的客户端而已。
        具体的问题是这样的。在我们的系统中每个图层上的对象都有一个属性是需要程序自动填上去的。因为我们做的编辑器是一个通用图形编辑器。在用户建立和修改图形的时候能够按照业务规则自动的给对象添上一些必要的属性。这个规则是可以配置的。现在问题就是,当用户在编辑的过程中,修改了规则或者添加了新规则。我们的编辑器是感觉不到这个规则的变化的。
        在开始编辑的时候,系统会把业务规则传递给编辑器使用。在其它地方就没有修改编辑器中业务规则的方式了。但是在我们的用户界面中有一个修改业务规则的界面。用户是可以在任何时候修改业务规则的。当然修改有就不能够立即其作用。我以前为了解决这个问题给编辑器添加了一个功能那就是刷行配置信息。这回导致所有的配置信息被重新载入。当然业务规则也会被重新载入。这样不久更新了吗。
        今天再仔细想了一下,我认为这两个控件都是我自己编写的并没有第三方库介入。为什么要使用这样一种不自然的方式来桥接这两个系统呢?
        于是我想到了让这两个控件共享同一个数据对象(里面是业务规则)。有用户界面的那个是可以编辑该对象的客户端。而编辑器则是一个只读取不修改的客户端。于是这个问题就解决了。不管什么时候用户修改了业务规则,在编辑器中都能马上反应出来。因为编辑器不在缓存规则而是直接引用。
       作到这一步我才发现这就是一个典型的MVC模型。
    
public interface EditorLayerObjects
    
{
        
int LayerCount{get;}
        EditLayerObject GetLayerAt(
int pIndex);
        EditLayerObject GetLayerOf(
string pClassName);
        
int IndexOfLayer(EditLayerObject pLayerObject);
        
void AppendLayer(EditLayerObject pLayerObject);     
        
void AppendLayer(ICollection pLayerObjectCol);
        
void RemoveLayer(EditLayerObject pLayerObject);
        
void ClearLayer();
    }
    上面是数据模型的接口。
    原先的编辑器自己实现了这个接口
  
public class DefaultEditor:EditorObject
{
  
其他代码
    
EditorLayerObjects 成员
}
  后来修改了EditLayerObjects 添加了一个函数
public interface EditorLayerObjects
    
{
        
void AttachModel(EditorLayerObjects pLayerObjects);
        
int LayerCount{get;}
        EditLayerObject GetLayerAt(
int pIndex);
        EditLayerObject GetLayerOf(
string pClassName);
        
int IndexOfLayer(EditLayerObject pLayerObject);
        
void AppendLayer(EditLayerObject pLayerObject);     
        
void AppendLayer(ICollection pLayerObjectCol);
        
void RemoveLayer(EditLayerObject pLayerObject);
        
void ClearLayer();
    }
      这个方法允许对接口将自己的函数调用转发给另外一个挂接对象。
     于是这样就可以将那个编辑EditorLayerObjects的用户界面中对EditorLayerObjects的实现挂接到编辑器的EditorLayerObjects上。这样二者就自动地实现了数据共享。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

现阶段我国大数据共享面临的问题

点击查看全文 2013年,在北爱尔兰召开的G8会议,签署了《开放数据宪章》,提出了开放14个重点领域数据。要求发布的数据不是一般的数据,而是高价值的数据,不仅仅是加工过的数据,还要有源数据。...

js跨域解决数据共享问题

js中几种实用的跨域方法原理详解 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。...

Application数据共享Android

  • 2015-11-22 21:38
  • 5.67MB
  • 下载

Android入门进阶教程(20)-ContentProvider 数据共享

1、使用ContentProvider 共享数据:  ContentProvider 类主要方法的作用如下:  * public boolean onCreate(); -该方法在Conten...

数据共享与保护

  • 2013-01-28 16:33
  • 409KB
  • 下载

ContentProvider实现数据共享

  • 2016-03-29 22:09
  • 7.78MB
  • 下载

vbox中windows主机与Linux虚拟机之间数据共享的几种方式

前段时间一直在搞Linux,有些源码需要在Linux下编译,哎,反正是介于种种原因吧,我很郁闷的接触了Linux系统!于是乎,在windows机上装了一个Vbox(本人一直很偏爱Oracle的软件,嘿...

数据共享平台

  • 2017-04-18 14:31
  • 267KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)