Если вы хотите взглянуть еще на несколько слов об этой проблеме, вы должны взглянуть на MVP и MVC. (Это расшифровывается как Model View Controller и Model View Presenter). Некоторые люди застрелят меня за эти слова, но они очень похожи по своей концепции.
Цель MVP и MVC - позволить вам разрабатывать логику приложения, даже не задумываясь о внешнем виде приложения. Это также позволяет вам определять ваши взаимодействия с пользователем без реализации реального GUI. По сути, ваша модель - это логика вашего приложения, ваши данные, ваши классы, которые на самом деле делают что-то вроде общения с вашей базой данных. Ваш докладчик или контролер - это то, что взаимодействует с вашей моделью, и что контролирует ваш пользовательский интерфейс и реагирует на действия пользователя в интерфейсе. Наконец, ваш вид - это ваш дизайн winforms или веб-страница.
Я уверен, что вы сможете найти много материалов в Интернете об этом, но конкретная помощь в решении этой проблемы должна послужить информированию и иллюстрации вашего чтения.
Первое, что вам нужно сделать, это начать создавать ваши объекты, которые представляют ваши данные. Таким образом, у вас будет объект CaseNote, который содержит данные casenote. У вас будет какой-то контейнер данных заметки о деле, например база данных заметок о деле. Вы можете определить логические операции и их свойства, как если бы они были реальными элементами.
Затем вы перейдете к определению вашего докладчика или контроллера, который определит операции, которые вы хотите поддерживать из графического интерфейса. В то же время вы должны определить интерфейс, который будет определять для докладчика / контроллера, какие операции могут выполняться в графическом интерфейсе. Так, например, ваш докладчик может предоставить метод с именем SearchForCaseNote, который принимает строковый параметр. Интерфейс вашего представления предоставит метод с именем DisplayCaseNote. Когда пользователь нажимает кнопку поиска, представление передается через команду докладчику, который затем вызывает модель для получения данных. На этом этапе докладчик может отформатировать данные, то есть преобразовать объект DateTime в строку, а затем передать данные обратно в представление через метод определения интерфейса, который называется DisplayCaseNote.
Вам не нужно использовать интерфейс View, вы можете обращаться к представлению напрямую, но наличие интерфейса означает, что вы можете иметь много разных реализаций представления.
И последнее, что мне нужно упомянуть, это то, где вы создаете эти различные части вашего приложения. На мой взгляд, все, что должно выпасть из докладчика / контроллера. Поэтому, когда ваше приложение запускается, оно создает объект презентатора / контроллера, который затем создает и отображает ваше представление, передавая себя как переменную представлению. Затем презентатор / контроллер может либо создать исходные модели, загрузив их с диска, либо в идеале обнаружить их через контейнер внедрения зависимостей, например, единицу. На самом деле, использование единства для обнаружения реализации представления, вероятно, снова является лучшей идеей, поскольку дает вам истинное разделение между представлением и докладчиком / контроллером. Когда вы переходите к другому представлению (то есть открываете другое окно), ваш докладчик / контроллер должен предоставлять метод, такой как DisplayDetailPage, который представление вызывает при нажатии кнопки. Это создаст презентатор / контроллер для следующего представления, которое, в свою очередь, создаст представление и получит ссылку на модель.
Надеюсь, это поможет.