多UI管理机制中的模型和验证

时间:2009-08-05 16:57:00

标签: asp.net-mvc silverlight validation model

我和一个小团队合作。我们有多种交付机制,通常针对相同的业务模式但不同的风险敞口。我们需要一些帮助,以便在我们的应用程序中共享模型和验证。

为Silverlight 3(非RIA服务),ASP.net MVC和WPF的用户体验和代码重用创建模型的一致性验证的最佳机制是什么?

对于我们的域模型,我们愿意使用EF,NHibernate或Linq to Sql。创建DTO和演示/视图模型也是可以接受的。

不幸的是,数据库是遗留的,并没有遵循良好的密钥约定。

我们希望构建一组模型和验证(简单验证)访问者等,以便在所有交付机制中轻松使用。 MVP或MVVM模式看起来很吸引人以及UpdateControls,但我一直无法找到似乎适用于所有机制的单一模式。

从Silverlight 3中删除ComponentModel似乎使网络上的大多数示例无效。

非常感谢任何建议。

1 个答案:

答案 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: - )

安德鲁