BLL层我个人感觉是与通用的NH/IB OR映射差异比较大的地方处于承上启下的位置 承上可以与数据库打交道起到了DAL的作用 启下可以与BP层/Stub层/或客户端直接打交道作为其服务层 publicclassUserImp<T>:BLService<T> whereT:EESObjectnew() { [Operation(ScopeOptionDisabled)] publicvirtualTFindById(Stringcode) { returnbaseFindId(code); } [Operation(ScopeOptionDisabled)] publicvirtualDataCollection<T>FindByName(stringname) { Whereclause=newWhere(); clauseAdd("Name"name); returnbaseFind(clause); }
[Action("保存""保存")] [Operation(ScopeOptionRequired)] publicoverrideTSave(Tt) { returnbaseSave(t); } } BLService<T> 为业务层的基类主要提供增删改查的功能默认状态下基类的服务是不公开的需要在此类里面公开 Operation为事务自定义属性通常在此处添加也可以在配置文件里添加 查询也是此OR的一个特色对于客户端和服务端的处理雷同但不相同服务器端可以使用 WhereEx 支持拼接字符串和其他等特殊处理在处理自定义查询的时候非常方便 Action自定义属性为动作标注在生成Controller的时候会自动生成 [EESBO("User")] publicclassUserService:UserImp<User> { [Operation(ScopeOptionRequired)] publicvirtualEESContextLogin(stringuserIdstringsalt) { ……… } [Operation(ScopeOptionRequired)] [Action("密码复位")] publicvirtualUserResetPwd(Useruser) { ……… } } UserService 为常用编码的类UserImp主要为自动生成的类业务逻辑通常放在UserService类里面 EESBO自定义属性标注此类为服务类在生成代理/服务配置的时候会自动生成配置文件和代理类 其他的与UserImp类似 一直在考虑是不是要把Linq加入进去没有决定下来 公开的类必须添加 virtual 使用的时候可以用ProxyFactorygetProxy<UserService>() 或FactoryNew<UserService>通常在服务器端用 FactoryNew<UserService>()方式在客户端用 ProxyFactorygetProxy<UserService>() 方式调用 示例代码 main() { EESCommonConfigConfigurationRoot=“……”; Useruser=FactoryNew<User>(); userCode=””;
UserServicesrv=FactoryNew<UserService>(); srvSave(user); } 此处没有太多的处理加载的地方系统会自动处理配置文件的加载基于声明式事务的处理对于多数据源和层次操作则会一层一层的处理 如果需要通过http进行远程调用服务器端的UserService不需要作任何的改变只需要加入到IIS里面并添加些配置文件则可通过http 实现远程RPC调用客户端代码不需要作改变也是更改一下添加一个自动生成的代理类则可 |