.net设计模式的纠结,彭大大出来解救。

10-01-26 goddie
              

现在公司要开发一个web系统,各种原因确定了要用C# .net来开发。

早就厌烦了.net基于控件、数据库的设计方式,以后该需求恐怕系统要重做。

这次想说运用OO设计思想,尽量解耦合。但是OO思想在.net中实现起来太纠结。

例如设计这么一个类:

// 文章分类

class Catalog{

}

//新闻文章

class News{

private Catalog catalog;

private String name;

}

News中的catalog我们都知道在Hibernate数据空中实际就是个int字段,记录catalog的id。

但是在.net里面没有什么好的数据映射方案(NHinbernate需要下属重新学习,下属没有这方面经验)。

本来想手工实现对象到数据的存储,类似上面这种设计,手工实现不又回到了基于数据库编程了么。

太纠结了。

谁能帮忙想想办法。

              

1
banq
2010-01-27 09:37

问题不大,将What做什么和How怎么做进行清晰分离分层就可以,数据库属于How范畴,你能做到和领域模型相对解耦就可以了。

goddie
2010-01-27 17:10

我看到有2种设计:

第一种:

// 文章分类

class Catalog{

private int catalogID;

}

//新闻文章

class News{

private Catalog catalog;

private String name;

}

---------------------------------------------------------

第二种:

// 文章分类

class Catalog{

private int catalogID;

}

//新闻文章

class News{

private int catalogID;

private String name;

}

-----------------------------------------------------------

新闻News类中,private Catalog catalog; 还是 private int catalogID; 能解释一下吗?

banq
2010-01-28 10:02

第一种是标准的对象设计,对象通过引用另外一个对象来表达这两个对象之间的关联关系。这和UML图示关联是一一对应的。

第二种是数据库做法,写这种代码的人一般都是没有对象思想,是将类看成是数据表数据的映射产物,以数据表结构来看待类。

类和数据表到底以谁为主,这两种写法就无意暴露了程序员的设计思路。

goddie
2010-01-28 12:37

这下茶几了。

我在PowerDesigner15中用了OOM建模,想直接生成数据表。结果PowerDesigner不支持第一种标准的面向对象设计。

Rational Rose中这样设计,也只能建模,不可以由模型O-R到数据库。

除了NHinbernate以外,还有什么方法可以让我使用第一种面向对象的设计,并且能够从模型生成到数据表。

不想用NHinbernate因为其O-R过程需要用户手工先建表,太受不了。

感觉全中国只有jdon这里在坚持面向对象,其他地方还在面向数据。会不会是我们错了。

[该贴被goddie于2010-01-28 12:47修改过]

2Go 1 2 下一页