Кому принадлежит ViewModel в приложении MEF

Я разрабатываю приложение (Silverllight или WPF, все еще обсуждаю), но я застрял в проблеме дизайна, и мне было интересно, что вы можете высказать свое мнение по этому поводу....

Вот сценарий. Это приложение управления сотрудниками для HR. Как только приложение будет готово, отдел кадров может запросить добавление дополнительных функций (что в большинстве случаев означает дополнительные данные). Скажем, есть форма сотрудника, которая сохраняет запись о сотруднике в базе данных. Форма сотрудника имеет связанную с ней модель EmployeeViewModel, с которой она взаимодействует. EmployeeViewModel использует структуру Entity для сохранения своих данных в базе данных.

Теперь, если отдел кадров захочет добавить новый набор полей, например «Информация о супруге», я планирую предоставить подключаемый модуль, который отдел кадров может просто добавить в форму, когда он будет доступен. Этот подключаемый модуль SpouseInfo является своего рода пользовательским элементом управления с собственной моделью представления.

Проблема в том, кому здесь принадлежит ViewModel.

а. Делаю ли я SpouseInfo полностью независимым? Всякий раз, когда форма Employee сохраняется или загружается, SpouseInfo вызывает свою модель представления и загружает или сохраняет данные. В этом случае, прежде чем он сможет сохранить или загрузить данные, ему потребуется идентификатор сотрудника из родительской формы, прежде чем данные можно будет сохранить (это означает, что сначала форма сотрудника сохранит данные, а затем передаст идентификатор сотрудника в SpouseInfo)

Or

б. Форма Employee владеет ViewModel для SpouseInfo. Будучи «родительским объектом», он отвечает за загрузку и сохранение «дочернего объекта», то есть модели представления SpouseInfo.

Спасибо


person Meenu    schedule 27.10.2010    source источник


Ответы (1)


Это действительно дизайнерский выбор. Тот факт, что вы используете MEF, не означает, что вам не нужно решать, какое «владение» наиболее целесообразно для вашего приложения и какие компоненты должны отвечать за другие.

При этом я, вероятно, сделал бы информацию «SpouseInfo» соответствующей известному интерфейсу и использовал бы этот интерфейс (загруженный через MEF) из представления/ViewModel основного сотрудника. Это позволит загружать любой введенный элемент управления, который является зависимостью сотрудника, во время выполнения, что-то вроде

public interface IEmployeeDependant
{
     FrameworkElement View;
     IPersistWithParentID ViewModel;
}

Если вы импортировали это через MEF, вы могли бы достаточно легко справиться с макетом и вызвать виртуальную машину напрямую с правильной необходимой информацией (возможно, EmployeeId), чтобы сохранить «под» ViewModel.

person Reed Copsey    schedule 27.10.2010
comment
Спасибо за ответ Рид. Я согласен, что то, как я справлюсь с этим, является исключительно выбором дизайна, и, поскольку я нахожусь в режиме проектирования на данном этапе, я просто хочу убедиться, что делаю это наиболее эффективным способом. Ваше предложение по дизайну имеет смысл. Я, скорее всего, пойду с чем-то вроде этого. Спасибо. - person Meenu; 28.10.2010