加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:49:54 所属栏目:asp.Net 来源:网络整理
导读:目前,我已经非常成功地构建了我的应用程序,如下所示: 数据模型(实体框架4.1) 使用Enterprise Library 5.0验证应用程序块进行验证. 由可重用类库管理的对象上下文. 因此,UI在代码上相当轻松,但我知道我还没完全在那里. 如果我想设置我的项目以便实现Web窗体,
目前,我已经非常成功地构建了我的应用程序,如下所示:

>数据模型(实体框架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等连接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读