1

В трехуровневой модели (уровни доступа к презентационным бизнес-данным) я могу последовательно поддерживать агностик нижних уровней верхних уровней. Например, мой уровень доступа к данным никогда не знает, как он представлен или какие бизнес-правила действуют на нем. Мои бизнес-правила являются агностиками того, как они представлены.Как я могу сохранить разделение проблем при использовании сетки в уровне представления (особенно .NET)?

Но я должен молить Деметру о прощении или хотя бы попросить членов совета Stackoverflow советоваться с одним: как вы представляете «таблицу» пользователю без ссылки на объект доступа к данным на уровне презентации? Снова и снова я нахожусь ссылкой на ADO.NET DataTable в объекте GridView. В настоящее время я использую сторонние инструменты в обоих слоях. Таблица находится из объекта OpenComponents OpenLink; сетью является Infragistics UltraGrid (платформа Windows). Но я виноват в том же нарушении.

Редактировать: Меня больше всего интересует, как это можно сделать с помощью WinForm 3.5 .NET. Обратите внимание на мои комментарии ниже: Я считаю, что ссылка в комментарии - это то, что я должен был сделать, но я надеялся, что мне не придется слишком интересоваться объектами домена. Я не хочу, чтобы меня обвиняли в чрезмерном проектировании. Это хороший баланс?

+0

при указании технологии, которые вы планируете использовать, отвечающие может обеспечить немного более подробную информацию о осуществление подробности. – MedicineMan

+0

Я ограничен Windows Forms .NET 3.5. Объектами базы данных являются таблицы памяти OpenComponents, которые относятся к области финансов и торговли нефтью и газом. Я считаю, что это может быть то, что я должен был прочитать в первую очередь. «Как: доступ к объектам, связанным с строками DataGridView в Windows Forms» (http://msdn.microsoft.com/en-us/library/4wszzzc7.aspx) – Blanthor

ответ

1

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

В этом случае я бы определил DTO для своего типа «строка данных», а затем использовал List<RowDTO> как тип, который я передал бы в сетку.

+0

Я был удивлен, насколько это просто. Сетка показывает столбцы для каждого открытого свойства автоматически, без необходимости добавлять атрибуты. С небольшой добавленной сложностью у меня теперь есть полезный SoC, с которым я могу работать. – Blanthor

0

Я не уверен, что другие члены stackoverflow сделают это, но WPF, ASP MVC, Silverlight, то, что вы будете делать, это использовать шаблон проектирования MVVM. Боюсь, у меня сейчас нет хороших ссылок.

В MVVM ключевая идея заключается в том, что ваш просмотр обращается к данным в ViewModel. ViewModel представляет данные для представления путем отображения свойств. В WPF и Silverlight вы используете привязку для доступа к данным и использования шаблонов данных, чтобы выразить точную информацию о том, как ее выразить. Обычно вы выставляете коллекцию с номером ObservableCollection. В ASP MVC вы должны переключиться на контекст и получить доступ к модели таким образом.

<body> <h1><% Model.MyHeaderMessage %></h1> 

Я бы сказал, что вы должны сделать, это в вашей ViewModel (аналогично контроллеру) хит сервера/услуги для данных и возвращает набор записей. Переупаковывайте данные в простых классах данных и помещайте их в ObservableCollection, выставляя это для представления через свойство, которое возвращает ObservableCollection. Если вы выполняете ASP MVC, выставляйте данные через свойство, которое возвращает IEnumerable.

0

Очень распространенный шаблон для этого - шаблон представления представлений модели (MVP).

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

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

Так вид будет что-то вроде этого:

internal interface IListClientsView 
{ 
    public string Title { set; } 
    public IList<Client> Clients { set; } 
} 

И реализация в веб-форме будет это:

public partial class WebForm1 : System.Web.UI.Page, IListClientsView 
{ 
    ListClientsPresenter presenter; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     presenter = new ListClientsPresenter(this); 
     if (!Page.IsPostBack) 
      presenter.LoadView(); 
    } 

    public IList<Client> Clients 
    { 
     set { GrvClients.DataSource = value; 
     GrvClients.DataBind(); 
     } 
    } 
} 

Конечно, это также может быть WinForm.Ключ просто заставляет WinForm реализовывать интерфейс IxxxView и вызывать соответствующий ведущий. Даритель будет выглядеть следующим образом:

public class ListClientsPresenter 
{ 
    IListClientsView View; 
    public ListClientsPresenter(IListClientsView view) 
    { 
     this.View = view; 
    } 

    public void LoadView() 
    { 
     View.Title = "List of Clients"; 
     View.Clients = new List<Client> { 
      new Client {Name = "Client 1"}, 
      new Client {Name = "Client 2"} 
     }; 
    } 
} 

Это очень простой пример, вы должны проверить эту статью: http://msdn.microsoft.com/en-us/magazine/cc188690.aspx

+0

Первоначально я боялся добавить в проект такую ​​сложность. Прочитав больше об этом шаблоне, я могу реорганизовать MVP. Я заметил, что пример Boodhoo использует DTO в модели. – Blanthor

+0

В наши дни очень распространенный шаблон MVVM Model-View-ViewModel, вместо того, чтобы использовать DTO, вы создаете класс, известный как класс ViewModel для представления вашего интерфейса. Это вариант, хотя я предпочитаю использовать MVP, но это всего лишь мнение, вы должны выбрать, что лучше для вас. В конце концов, нет серебряных пуль;) – vintem

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