这几天看了看ORM(我看的Castle ActiveRecord),看完以后我又迷茫了。
以前做东西的层次如下:
问题1:
原来我是在DAL层写具体的CRUD,现在有了ORM生成的Model(Model里都带了CRUD)后就不要DAL了吗?
问题2:
如果加入了ORM,那上面的层次要如何搭配了呢?难道Model里自带的CRUD要贯穿全部层了吗?
问题3:
如果一个功能需要有2步:
1) 插入数据库一条数据后获得返回的Id(Id为数据库自增长)。
2) 根据这个Id再向关系表里插入一条数据。
如果这两部在数据库里我会写存储过程直接用事务来实现。
我的问题是如果用ORM,我可以在BLL层(是在BLL好还是在IDAL好?)把这两部组装成一个事务吗?
问题4:
关于每层的项目数。
如果说现在一个程序里有两个功能模块(A,B)我一般会建下列项目:
Sample.Web
Sample.BLL.A
Sample.IDAL.A
Sample.DAL.ASQLServer
Sample.DAL.AAccess
Sample.BLL.B
Sample.IDAL.B
Sample.DAL.BSQLServer
Sample.DAL.BAccess
我这样做一开的原因是有可能程序到最后分几个版本,每个版本的功能模块不一样,到时候给不同的dll就好了。但是如果一个程序里只有2个功能模块,那这项目个数我还能接受,如果是10个8个的话照我这样建立项目,那一个解决方案里就得有几十个项目,到时候我得晕死,请问您是怎么建项目的?
1:你使用的方案其实是另一种模式,和ActiveRecord不同,应该是属于Mapper模式,所以没有什么可比性。ActiveRecord更简单。具体参见《Patterns of Enterprise Application Architecture》。
2:同上。
3:这是业务逻辑,当然入在BLL了。具体的,你可以使用分布式事务。如使用类TransactionScope。
4:推荐分开为多个工程。(http://www.cnblogs.com/zgynhqf/archive/2009/11/21/1607743.html)如果嫌这个单向依赖的工作太多,可以使用虚拟的目录进行管理。