2016-03-03 4 views
-2

Я изучаю различные уровни в разработке программного обеспечения, такие как уровень представления, логический уровень ... и т. Д.Visual Studio C# - Разделение уровня

Итак, у меня есть этот проект RaceTrackSimulator, который является приложением Windows Forms. Я хочу, чтобы отделить все классы (логики) из графического интерфейса (представления), и я сделал так, как это:

The Project Solution in Visual Studio

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

namespace RaceTrackSimulator.BusinessLogic 

Как решить такую ​​проблему?

Спасибо!

+1

Вы имеете в виду, что вы не можете получить доступ к классам из формы или не можете получить доступ к форме из классов? – stuartd

+1

Если вы просто скопируете код для логики представления в отдельный файл, но все еще имеете возможность изменять компоненты графического интерфейса, вы не отделили бизнес-логику от логики представления! – mellamokb

ответ

0

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

Также убедитесь, что уровень видимости компонентов установлен на «Публичный» на вкладке свойств в конструкторе форм. Как только они станут общедоступными, вы сможете получить доступ к ним в любом из трех классов, которые вы создали.

2

Вы только что отделили классы бизнес-уровня в отдельной папке, которая фактически не квалифицируется как отдельный уровень в целом. Вы должны перенести все эти классы в отдельный проект (например, проект библиотеки классов) и использовать DLL этой библиотеки классов для приложения формы уровня представления.

Вы также можете выбрать, написать свой бизнес-уровень как службу WCF и развернуть их. В свою очередь, ваш клиентский/презентационный уровень будет потреблять услугу, чтобы получить доступ к бизнес-уровню; что является одним из основополагающих причин, то для всех разных клиентских (UI или других) клиентов вам не нужно отправлять исключительно dll.

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

0

ли вы положили

using RaceTrackSimulator.BusinessLogic; 

В верхней части файла, в котором вы ссылаетесь свои объекты?

0

Если ваш код находится в пространстве имен, это не имеет значения. Вы сделали это хорошо. Все, что вам нужно сделать, это предоставить средства доступа к компонентам из ваших бизнес-логических классов. Существует множество способов сделать это в зависимости от ваших требований. Вы можете предоставить метод post (Object state) в своей форме и создать экземпляр вашего логического класса, передающего ссылку на объект формы. Затем ваша бизнес-логика может просто отправить все, что ему нравится, обратно в форму, и это зависит от того, как она обрабатывает логику пользовательского интерфейса на основе данных/сообщений, которые она получает от логического уровня. Или вы можете сделать ваши компоненты более общедоступными для логического уровня. Или вы предоставляете интерфейс, который позволяет напрямую обращаться к компонентам.

Кроме того, то, что вы называете Business Logic в приведенном выше примере, на самом деле не логично. Это классы бизнес-моделей, по внешнему виду.

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