一直以来有一个困惑,就是如果正确的使用面向对象的方式开发数据库的软件(如MIS,ERP等系统)。如果以面向对象的方式考虑设计,那么一切都为对象,那么要设计一套涉及到后台为大型数据库的系统时(如SQLServer, DB2),是否应将数据库中的内容(如每个报表)都设计成一个类呢?如果需要设计成一个类那么这个类除了会保存数据(表)的内容外,是否还要包括存取的方式(如增加、删除、编辑、查询等)呢?还是说将类理解成为一个结构体,只用来保存数据,而存取的方式由专门的类来完成操作。如果以上面的思路来理解问题,涉及到具体的语言----
如果用VC的话,如果用ADO的COM组件,我想应该将数据读到指定的类中;
如果用C#的话,使用ADO.NET的DataSet,我认为DataSet就是一个类了,但是在DataSet中却没有操作方式,这时就有如SqlAdapter等组件来完成操作;但是上面方式考虑的太少,因为只考虑到了一个表的数据到一个类中,而现在的大多数据库都为关系型数据库,不管项目有多大,基本上都有关系存在。以前我设计数据库项目时都是先从设计数据库(关系)开始,然后来设计类图,现在我不知道这样设计的方式是否正确,如果先设计数据库对设计类图势必会造成影响,因为设计的类图会从数据关系来思考;而从类图开始设计我又觉得无法保证数据库关系的完整性。说了这么多,我想表达的是如何才能设计一套合理的数据库系统,多年的工作习惯造成了我喜欢将数据库设计的功能多一些,如表关系、存储过程、存储过程中使用业务逻辑等,这种方式使我更多的以面向过程方式来考虑问题。说的有些乱,想到什么就写出来了,希望各位帮帮忙,讲讲你们是怎样考虑设计这样的项目的呢?

解决方案 »

  1.   

    to 如果以面向对象的方式考虑设计,那么一切都为对象,那么要设计一套涉及到后台为大型数据库的系统时(如SQLServer, DB2),是否应将数据库中的内容(如每个报表)都设计成一个类呢?如果需要设计成一个类那么这个类除了会保存数据(表)的内容外,是否还要包括存取的方式(如增加、删除、编辑、查询等)呢?现在大型的数据库都是关系型数据库,用关系型数据库来存类的对象,你需要做很多转化操作,这样反而不能体现出数据库的优势,并且增加了程序的负担。
      

  2.   

    to 如果用C#的话,使用ADO.NET的DataSet,我认为DataSet就是一个类了,但是在DataSet中却没有操作方式,这时就有如SqlAdapter等组件来完成操作;DataSet只是一个临时数据集。
    DB层与UI层之间的数据交互,考虑到不需要UI层不再做数据转化的操作,那么DB层应该提供自定义的数据结构变量;但是如此,UI层在做绑定操作的时候比较复杂性,因此DB层最好也能按照需求提供返回DataSet或者DataTable,DataView之类对象。
      

  3.   

    to zlkingdom(风之悲伤)
    你说的也有道理
      

  4.   

    大哥 面向对象是 面向实体的 
    而现在的主流数据库 都是关系性的 关于使用面向对象的数据库设计方式方法????
    我还真没听过
    推荐一个C#学习网站 有站长在线答疑http://www.aspxwork.com用的是动网新闻。总体感觉还算不错。资料满全的。
    最有特点的是有站长在线答疑。感觉满有特色的。
      

  5.   

    现在的O/R Mapping不就是这样的一种实现嘛?
      

  6.   

    Nhibernate,面向对象的数据库关系持久化,这个也许能帮楼主
      

  7.   

    Nhibernate这个东西在数据量不是非常大的情况下还是很方便灵活的
    但是在数据量很大的情况下建议还是使用SQL。那东西会很大程度影响性能