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

现在公司要开发一个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需要下属重新学习,下属没有这方面经验)。
本来想手工实现对象到数据的存储,类似上面这种设计,手工实现不又回到了基于数据库编程了么。
太纠结了。
谁能帮忙想想办法。

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

我看到有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; 能解释一下吗?

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

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

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

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

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

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

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

感觉全中国只有jdon这里在坚持面向对象,其他地方还在面向数据。会不会是我们错了。
[该贴被goddie于2010-01-28 12:47修改过]

2010年01月28日 12:37 "goddie"的内容
在PowerDesigner15中用了OOM建模,想直接生成数据表。结果PowerDesigner不支持第一种标准的面向对象设计

2007年Jdon就喊出
坚决抛弃powerdesigner建模
建议使用Borland together,都是对象建模,普通UML工具都是对象建模。

其他地方是不是面向数据不知道,但是Jdon一直跟踪软件发展最前沿。至于为什么好像“所有人”都错了,那是因为“所有人”接受的软件教育错了。中国教育问题。这个话题本站也有很多讨论。
[该贴被banq于2010-01-28 13:41修改过]

为什么不试一试entity framework....vs2010...
有个缺点,不支持其他数据库,目前只能sql server...

如果进一步使用oo...建议搜索一下naked objects...有.net的插件

只是探索,希望能有所帮助

.net 的话可以试试ECO。支持多种数据库,基于 MDA DDD理念。