Подключение любого интерфейса к моему приложению - PullRequest
4 голосов
/ 31 октября 2011

В настоящее время я очень успешно разработал свои приложения следующим образом:

  • Модель данных (Entity Framework 4.1)

  • Проверка с использованием блока приложения для проверки правильности Enterprise Library 5.0.

  • Контекст объекта, управляемый повторно используемой библиотекой классов.

Итак, пользовательский интерфейс довольно легок в коде, но я знаю, что еще не полностью там.

Если я хотел, чтобы мои проекты были настроены так, чтобы я мог реализовать приложение Web Forms, MVC, WPF Desktop или 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();
        }
    }
}

Интерфейс веб-приложения

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);
        }
    }
}

Насколько я близок?

1 Ответ

3 голосов
/ 31 октября 2011

Самый простой способ раскрыть свой средний / бэкэнд, который может подключить множество клиентов, - это обернуть все это в один или несколько веб-сервисов.В вашем примере вы можете рассмотреть возможность предоставления MyEntityFacade как службы WCF или создать совершенно новый уровень, который будет проходить между вашими клиентами и фасадом.

Если вы придерживаетесь объектов POCO иSOAP, вы можете, вероятно, учитывать возможность подключения из Java, Javascript, Python и т. Д. В дополнение к перечисленным клиентам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...