OO Design Advice - Требования изменились, так как реорганизовать существующие классы? - PullRequest
1 голос
/ 27 октября 2011

Недавно было представлено новое требование, и мне интересно, что будет рекомендовано.

Мой текущий дизайн выглядит примерно так: Уровень представления: View-ViewModel-Model Уровень сервиса: WCF (классы, сгенерированные из классов ORM) Уровень модели сервера: ORM-сгенерированные классы из БД Хранилище данных: реляционная база данных

Все работает нормально, но теперь мне нужно реализовать функцию, которая задает мне вопрос, нужно ли мне переделывать свой дизайн. Вот сценарий: у меня есть таблица Employee, которую ORM генерирует в классе Employee, который, в свою очередь, отображается на уровень на стороне клиента (Model) как другой класс Employee, который использует WCF для отправки обратно на сервер через EmployeeViewModel (он загружает данные из службы для этой сущности (Employee) и другие соответствующие данные (например, раскрывающиеся списки через коллекции других классов), и этот EmployeeViewModel, в свою очередь, привязывается к EmployeeView.

Мой класс Employee является типичным, например,

public partial class Employee: ViewEntity
{
    // other properties e.g. FirstName, etc.
    [Required]
    public string? Address
    {
        get 
        { 
            return ADDRESS; 
        }
        set
        {
            Validate(value, "Address");
            ADDRESS = value;
            OnPropertyChanged("Address");
        }
    }

    // Other methods...
    public static Employee CreateEmployee(IService service, string firstName, string lastName, string? address)
    {
        var emp = new Employee()
        {
            FIRST_NAME = firstName,
            LAST_NAME = lastName,
            ADDRESS = address
        };
        service.Create(emp);
        return emp;
    }
}

Первоначально требовалось, чтобы, когда пользователь вводил данные в форму (EmployeeView), единственными обязательными полями были FirstName, LastName и Address. В БД FIRST_NAME и LAST_NAME НЕ НУЖНЫ, а АДРЕС НЕДЕЙСТВИТЕЛЕН. Таким образом, классы соответствуют этой схеме БД и, следовательно, свойства Address / ADDRESS имеют тип Nullable (string?), Но, как вы можете видеть из модели моего клиента, я украсил свойство Address аннотацией [Required], и этого оказалось достаточно. требование.

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

В идеале я хотел бы использовать все те же классы, но не уверен, как включить это новое требование в вышеуказанную структуру. Нужно ли создавать новый класс Employee на уровне ORM, который наследуется от базового типа Employee, например EmployeeWithAddress, а затем этот новый класс просачивается через мой Service и ViewModel? Или, может быть, создать новые ViewModels и Views?

Любой совет будет полезен.

1 Ответ

0 голосов
/ 27 октября 2011

Я не уверен, как валидация отличается между MVC и WCF, но вы можете посмотреть на создание собственного валидатора.MVC использует System.ComponentModel.DataAnnotations для проверки.Если это относится к WCF, вы можете попробовать его.

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

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