日期:2014-05-19  浏览次数:20351 次

怎样使应用框架最大程度地抵御外来变化?
最近在设计一个.NET应用框架,目标是要让它能够最大程度地抵御外来变化,就是想使层与层之间的耦合度尽可能地低,层与层之间的依赖关系尽可能地小,下层的变化尽可能小地或根本不会影响到上一层的变化.同时还要解决一个很重要的问题,做到数据访问层与数据库的完全解耦或基本完全解耦,数据访问层与业务逻辑层的完全解耦或基本完全解耦.
  举个例子来说,数据库中的表设计发生了变化,或表的列增了或减了,或列的数据类型改变了或列名改变了,要么是数据访问层完全不发生变化或发生一点点的变化,而其他任何层都不发生变化,应用程序照常运行;要么是应用程序的任何层都不发生变化,应用程序照常运行.想了很久,一直都没有思路,请大家给参考一下或提个建议,或者是您设计过这样的应用框架,请多多指点,先谢过了.

------解决方案--------------------
如果你的数据库里需要增加一个表,然后应用程序不改变,没有向这个表输入的界面,难道还要坚持不变你的应用程序。

实际你的问题不在于分层,而在于层与层之间的映射。如果改变一层,总有相关部分需要改变,把改变局限到最近就可以。
------解决方案--------------------
数据库中的表设计发生了变化,或表的列增了或减了,或列的数据类型改变了或列名改变了,要么是数据访问层完全不发生变化或发生一点点的变化,而其他任何层都不发生变化。
-------------------

按我的理解数据访问层是固化的,像SQLHelper。而当数据库结构发生变化时,应该是业务层的逻辑方法发生变化,这不可避免。
------解决方案--------------------
LS说的正确
------解决方案--------------------
我觉得lz应该换一个思路去思考这个问题,不是尽量的去抵御外来变化,而是去尽快地适应这些变化!使你的需求变化不需要去重新实现或者方便修改,这个才是分层的目的;

------解决方案--------------------
举个例子来说,数据库中的表设计发生了变化,或表的列增了或减了,或列的数据类型改变了或列名改变了,要么是业务逻辑层完全不发生变化或发生一点点的变化,而其他任何层都不发生变化,应用程序照常运行;要么是应用程序的任何层都不发生变化,应用程序照常运行.

那这个例子来说吧,lz你考虑过数据库为什么会有变化吗?因为需求发生了变化,需求发生了变化总是会产生界面的相应变化(增加表的话你需要有相应的界面去录入数据,增加列的话也需要录入的),函数也会变化;可是,你变化了函数和数据库应该尽量的对没有变化的那部分程序不造成影响,这样你就降低了程序的复杂度,也会提高你开发的效率.而分层就是为了达到这个目的!
------解决方案--------------------
可以在前台做写EL,然后后台解析前台的EL再根据EL的内容绑定对应的数据,这样后台编译了就不动了,只改数据库和前台
------解决方案--------------------
hy_lihuan说得好啊,不过我以前也是LZ的想法,想想为什么数据库的表的字段会增长,是因为需求发生了改变,我们所能做的就是把这个变化控制在最小的范围而不影响其它已有的东东.