目前要开发一个框架,多层架构,打算是客户端用wpf,客户端到应用服务器用wcf, wcf把业务类直接发布出来供客户端调用, 业务类使用ef进行数据库访问
我想直接把ef生成的实体类做为dto在各层之间传递,那么客户端与wcf和业务类之间应该怎样一个合作模式?EF有没有这方面的最佳实践供参考?
还有项目之间的引用和公用应该怎么划分比较合理?
希望能有详细些的个人经验和确实可行的方案哟.
还有, 需要在entityframework生成的那堆poco上添加, 如数据合法性检验, 直接idataerrorinfo, IEditableObject, INotifyPropertyChanged等接口, 大家有什么好的建议吗?是利用t4直接修改poco好还是用什么泛型比较方便解决?
封装成仓储模式
我现在就是这么封装的
使用延迟查询接口.
仓储模式对我来说可能就是业务类的一种实现方式而已, 还有好多问题 需要解决的啊
例如实体类, 业务类抽象出来的接口(也是wcf里的契约), 客户端调用代理, 这么多层之间怎么分怎么引用, 有没有比较成熟的解决方案呢
@sweethome: 你可以看一下WPF里面一个MVVM的模式
就是实体类 跟 显示类分开
/// <summary> /// Dto对象转Entity,只是复制属性,dto的属性要比entity少2个哦。 /// </summary> /// <typeparam name="T">EntityObject</typeparam> /// <param name="dto">dto对象</param> /// <returns>EntityObject对应的实例</returns> public EntityObject ConvertToEntityObject<T>(object dto) where T : EntityObject { Type dtoEntity = dto.GetType(); var piList = dtoEntity.GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList(); Assembly assembly = Assembly.GetAssembly(typeof(T)); object resultObj = assembly.CreateInstance(string.Join(".",new string[]{typeof(T).Namespace,typeof(T).Name})); var piResultObj = resultObj.GetType().GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList(); foreach (System.Reflection.PropertyInfo pi in piList) { var sourcePi = piResultObj.Single(p => p.Name == pi.Name); if (sourcePi != null) { object value = pi.GetValue(dto, null); sourcePi.SetValue(resultObj, value, null); } } return resultObj as EntityObject; }
http://www.cnblogs.com/datacool/archive/2012/06/19/Dto2Entity.html
把你EF生成的那一大堆实体全部分离,剥离成单个的实体,然后你就可以对单个实体操作了
嗯,把实体独立出来!