目前,我已经非常成功地构建了我的应用程序,如下所示:
>数据模型(实体框架4.1)
>使用Enterprise Library 5.0验证应用程序块进行验证.
>由可重用类库管理的对象上下文.
因此,UI在代码上相当轻松,但我知道我还没完全在那里.
如果我想设置我的项目以便实现Web窗体,MVC,WPF桌面或Silverlight(甚至是Windows Phone 7)应用程序,我还需要采取哪些其他步骤?
这里有一些代码,故意简化,以说明我目前的游戏状态(我省略了代码约定和类库):
(目前EF4 Model First和ASP .Net Web Forms)
自动生成实体的部分类
namespace MyNamespace.Database { using Microsoft.Practices.EnterpriseLibrary.Validation; using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; [HasSelfValidation] public partial class MyEntity : IMyEntity { [SelfValidation] public void Validate(ValidationResults validationResults) { // Custom validation can go here,just add a new ValidationResult // to validationResults if the rule fails. if (validationResults != null) { validationResults.AddAllResults( ValidationFactory .CreateValidator<IMyEntity>() .Validate(this)); } } } }
验证
namespace MyNamespace.Database { using System.ComponentModel.DataAnnotations; using System.Diagnostics.Contracts; using Microsoft.Practices.EnterpriseLibrary.Validation; using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; [ContractClass(typeof(MyEntityContract))] public interface IMyEntity { int Id { get; set; } [Required] [NotNullValidator] [StringLengthValidator(0,RangeBoundaryType.Ignore,50,RangeBoundaryType.Inclusive,MessageTemplate = "MyEntity Name must be 50 characters or less.")] string Name { get; set; } void Validate(ValidationResults validationResults); } }
门面的数据访问
namespace MyNamespace.Facade { using System.Collections.Generic; using System.Linq; using Common.ObjectContextManagement; using Database; public sealed class MyEntityFacade : FacadeBase<MyEntities,MyEntity> { public IEnumerable<MyEntity> GetAll() { return this.ObjectContext.MyEntitys .Distinct() .ToList(); } } }
Web App UI
using (new UnitOfWorkScope(false)) { this.MyEntityList.DataSource = new MyEntityFacade().GetAll(); this.MyEntityList.DataBind(); } // Or... using (var scope = new UnitOfWorkScope(false)) { var myEntityFacade = new MyEntityFacade(); var myEntity = new MyEntity(); PopulateEntity(myEntity); // Validation errors are automatically presented // to the user from the Validate method if (Validate(myEntity)) { try { myEntityFacade.Add(myEntity); scope.SaveAllChanges(); } catch (Exception exception) { Logging.Write("Error",LoggingLevel.Error,exception.Message); } } }
我有多近?
解决方法
公开中间/后端以便各种客户端可以挂钩的最简单方法是将其全部包装在一个或多个Web服务中.在您的示例中,您可以考虑将MyEntityFacade公开为WCF服务,或者您可以构建一个在客户端和外观之间来回传递的全新层.
如果您坚持使用POCO对象和SOAP,除了列出的客户端之外,您可以考虑从java,javascript,python等连接.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。