Asp.net 将任何UI连接到我的应用程序

Asp.net 将任何UI连接到我的应用程序,asp.net,n-tier-architecture,Asp.net,N Tier Architecture,目前,我已经非常成功地构建了我的应用程序,如下所示: 数据模型(实体框架4.1) 使用Enterprise Library 5.0验证应用程序块进行验证 由可重用类库管理的对象上下文 因此,UI对代码的理解非常简单,但我知道我还没有完全做到这一点 如果我想设置我的项目,以便实现Web窗体、MVC、WPF桌面或Silverlight(甚至Windows Phone 7)应用程序,我还需要采取哪些其他步骤? 下面是一些经过刻意简化的代码,以说明我当前的工作状态(我省略了代码契约和类库): (目前

目前,我已经非常成功地构建了我的应用程序,如下所示:

  • 数据模型(实体框架4.1)

  • 使用Enterprise Library 5.0验证应用程序块进行验证

  • 由可重用类库管理的对象上下文

因此,UI对代码的理解非常简单,但我知道我还没有完全做到这一点

如果我想设置我的项目,以便实现Web窗体、MVC、WPF桌面或Silverlight(甚至Windows Phone 7)应用程序,我还需要采取哪些其他步骤?

下面是一些经过刻意简化的代码,以说明我当前的工作状态(我省略了代码契约和类库):

(目前EF4模型优先和ASP.NETWeb表单)

自动生成实体的分部类

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));
            }
        }
    }
}
用于数据访问的Facade

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服务中。在您的示例中,您可以考虑将MyEntityFacade作为WCF服务公开,或者您可以构建一个全新的层,该层在客户端和外观之间来回传递。
如果您坚持使用POCO对象和SOAP,除了列出的客户端之外,您还可以考虑java、javascript、python等的连接。

该死的5分钟编辑评论。。。到目前为止,我在谷歌的搜索已经开始指向WCF数据服务。如果我能用它来包装我的外表。。呃…你可以走那条路,但比那简单多了。。只需从Facade中提取一个接口,并将其作为ServiceContract。然后在WCF服务中实现它。
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();
        }
    }
}
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);
        }
    }
}