我和一个小团队合作。我们有多种交付机制,通常针对相同的业务模式但不同的风险敞口。我们需要一些帮助,以便在我们的应用程序中共享模型和验证。
为Silverlight 3(非RIA服务),ASP.net MVC和WPF的用户体验和代码重用创建模型的一致性验证的最佳机制是什么?
对于我们的域模型,我们愿意使用EF,NHibernate或Linq to Sql。创建DTO和演示/视图模型也是可以接受的。
不幸的是,数据库是遗留的,并没有遵循良好的密钥约定。
我们希望构建一组模型和验证(简单验证)访问者等,以便在所有交付机制中轻松使用。 MVP或MVVM模式看起来很吸引人以及UpdateControls,但我一直无法找到似乎适用于所有机制的单一模式。
从Silverlight 3中删除ComponentModel似乎使网络上的大多数示例无效。
非常感谢任何建议。
答案 0 :(得分:1)
我个人会选择Plain Old ClR Objects POCO作为商业模式。
using System.ComponentModel.DataAnnotations;
上面的命名空间也为您的对象带来了验证。有企业应用程序验证块,但我还不知道如何将其集成到Silverlight客户端。
但好处是您可以创建业务模型并使用DataAnnotations进行装饰,然后重复使用此业务模型。
它可以直接与NHibernate一起开箱即用,但不是EF,因为这不允许POCO。 Linq-to_Sql我相信,但你需要使用SQL Metal的映射文件或Linq-To_Sql的特定元数据。
其中一个问题,不是问题,而是我遇到的情况是我使用WCF在Silverlight和服务器之间进行通信。这为您提供了服务的生成代码库,更改这意味着下次更新服务时将丢失任何更改。
使用MetaDataType也是我希望在Silverlight中可以看到的东西,因为这意味着你可以装饰生成的类而不会有再次失去工作的风险。
如果你在WCF上使用.NET到.NET,你当然会获得更多的功能,但是如果你需要验证并返回错误以便可以互操作,那么我有一个包含HasErrors和Error []属性的基本Response类。我目前正在做以下事情:
Silverlight的: - 生成的WCF服务代理 - 一个ViewModel,它封装服务代理类拦截setter和getter - 使用System.ComponentModel.DataAnnotations
应用客户端验证商业模式: - 我正在使用POCO和NHibernate - 我正在使用企业应用程序验证块 - 我有一个带有HasErrors和Errors属性的基类域类
WCF: - 我正在使用请求和响应的DTO,即
AddClientResponse AddClient(AddClientRequest request)
Silverlight使用WCF服务,而WCF服务使用使用业务和数据访问层的存储库。
通过上面我可以推出一个Flex客户端,如果我不在Flex客户端处理数据验证,客户端仍会收到基本响应类中的错误。然后,它需要进行客户端验证或处理从服务器返回的错误。客户端部门保存往返。
[DataContract]
public class BaseResponse
{
[DataMember]
public Error[] Errors { get; set; }
[DataMember]
public Boolean HasErrors { get; set; }
}
希望这有帮助!
我自己一直在进行知识任务lol: - )
安德鲁