2015-08-13 2 views
0

У меня есть некоторые модели, например: RequestModelмодели для ввода и модели для просмотров, вы отделяете? C#

public class RequestModel 
{ 
    public int RequestId { get; set; } 

    public int CategoryKey { get; set; } 
    public int SubCategoryKey { get; set; } 
    public int AreaKey { get; set; } 
} 

Эта модель я использую, чтобы получить информацию от некоторых HTML-формы.

CategoryKey, SubCategoryKey и AreaKey, являются кодами для категории, подкатегории и значений площади.

Для удобства отображения необходимо показать CategoryValue, SubCategoryValue и AreaValue. Поэтому я использую ту же модель для своего представления и добавил к ней три поля.

public class RequestModel 
{ 
    public int RequestId { get; set; } 

    public int CategoryKey { get; set; } 
    public int SubCategoryKey { get; set; } 
    public int AreaKey { get; set; } 

    public String CategoryValue { get; set; } 
    public String SubCategoryValue { get; set; } 
    public String AreaValue { get; set; } 
} 

Я имею в виду разделить его на следующие классы:

public class RequestModel 
{ 
    public int RequestId { get; set; } 
} 

public class RequestInputModel : RequestModel 
{ 
    public int CategoryKey { get; set; } 
    public int SubCategoryKey { get; set; } 
    public int AreaKey { get; set; } 
} 

public class RequestDisplayModel : RequestModel 
{ 
    public int RequestId { get; set; } 
    public String CategoryValue { get; set; } 
    public String SubCategoryValue { get; set; } 
    public String AreaValue { get; set; } 
} 

Что вы думаете? действительно ли это необходимо? выполняете ли вы это разделение между классами для ввода и классов для отображения?

+0

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

+0

вы, кажется, смешиваете несколько различных парадигм дизайна вместе, ваш вопрос задает вопрос о моделировании MVC или MVVM, но ваш пример кода о наследовании – MikeT

ответ

1

Общая рекомендация заключается в том, что у вас есть данные в модели. т.е. информацию, которую нужно сохранить в файл или базу данных, тогда у вас есть бизнес-логика на модели просмотра, это будут такие вещи, как имя Fullname, имя First + Surname и т. п., поэтому данные должны отображаться, но не сохраняться то у вас есть вид сверху, что форматы и стили ваш выход

так что вы бы

public class PersonModel 
{ 
    string firstName; 
    string Surname; 
    DateTime DateOfBirth 
} 
public class PersonDisplayViewModel 
{ 
    PersonModel Model; 
    string FullName 
    { 
     get{return Model.firstname + " " + Model.Surname;} 
    } 
    int Age 
    { 
     get{return (DateTime.Today() - Model.DateOfBirth).TotalYears;} 
    } 
} 
public class PersonEditViewModel 
{ 
    PersonModel Model; 
    string FirstName { 
     get{return Model.FirstName;} 
     set{Model.FirstName = value;} 
    } 
    string Surname{ 
     get{return Model.Surname;} 
     set{Model.Surname= value;} 
    } 
    DateTime DateOfBirth{ 
     get{return Model.DateOfBirth;} 
     set{Model.Surname= DateOfBirth;} 
    } 

} 

причина этого заключается в том, что одни и те же основные данные могут быть использованы во многих местах, скажем, у вас есть который показывает полное имя и возраст и экран редактирования, который позволяет редактировать имя и фамилию и дату рождения. они имеют одни и те же основные данные человека, но они представляют данные по-разному. также скажите, что вы делали что-то для школы и хотели убедиться, что возраст учащихся составляет < 16, но у вас также есть штат, которому необходимо быть> 18. вы не можете поместить этот возрастной фильтр на человека. Модель, поскольку человек может быть любого возраста, но отлично вписывается в модель представления, которая определяет, что может и не может быть записано в под лежащую модель.

То же самое верно для представлений, если у вас есть версия вашего приложения в США, в которой вы хотите использовать Американский формат даты, т. е. mm-dd-yyyy, но одно и то же приложение в Великобритании будет нуждаться в формате dd-mm-yyyy. Это влияет на базовые данные или бизнес-логику? Нет, это просто изменяет внешний вид данных, поэтому идет в ящике

Смежные вопросы