VB.NET, VS 2010, .NET 4
Здравствуйте,
Я написал заявление.Я обнаружил, что он полон циклических ссылок.Я хотел бы переписать части моего кода, чтобы улучшить его дизайн.Я читал о многоуровневом программировании и хочу реализовать нечто подобное для своего приложения.
Справочная информация. Мое приложение - это управляющая программа для промышленного оборудования.Он анализирует рецепт (из файла Excel), который содержит информацию о времени и уставки для различных подключенных устройств.Существует три основных типа устройств: большинство из них подключаются через терминалы Beckhoff и обмениваются данными через TwinCAT (программное обеспечение Beckhoff's pseudo-PLC), а два являются устройствами RS-232, каждое из которых имеет свой протокол связи.Я могу общаться с устройствами Beckhoff через .NET API, предоставленный Beckhoff.Я написал классы анализатора для двух устройств RS-232.Некоторые из устройств Beckhoff являются входами, некоторые являются выходами;некоторые являются цифровыми, некоторые (псевдо) аналоговыми.
Я думаю, что моя проблема в том, что я пытался обернуть голову вокруг ООП при написании приложения, поэтому я создавал классы волей-неволей, не имея четкого представления об ихиерархия.В некоторых моментах я пытался сделать то, что считал правильным, скажем, создав класс «Device», унаследованный, скажем, классом «TwinCatDevice» и классом «Rs232Device».Но затем я просто вставил весь код связи в эти классы.
Сейчас я пытаюсь создать несколько модулей связи (например, UtilTwinCat, UtilRs232), которые содержат абстрактные методы, такие как «Connect», «Disconnect»., «Чтение», «Запись» и т. Д. Затем я пытаюсь переписать свой класс и подклассы «Устройство», чтобы использовать эти модули, чтобы они не содержали какой-либо (иногда избыточный) код связи.
Вот мой вопрос: было бы неплохо создать отдельные классы для каждого типа связи?т. е. должен ли я иметь, скажем, «TwinCatReadOnlyDigital», «TwinCatReadOnlyAnalog», «TwinCatWriteOnlyDigital», «TwinCatWriteOnlyAnalog», «TwinCatReadWriteDigital», «TwinCatReadWriteAnAnalog», «etc2DigDigital»Или, может быть, некоторые интерфейсы, такие как IReadOnly, IWriteOnly, IDuplex?
Кажется, что это не может быть правильным подходом, так как я представляю, что кто-то, кто хорош в программировании, не получит миллиард различных классов для каждогослучайность.Есть ли способ, которым я мог бы выборочно реализовать интерфейс в классе во время выполнения?Я думаю, что это глупый вопрос ... Я все еще пытаюсь понять, почему можно использовать интерфейс.Я ищу некоторые базовые идеи о том, как бороться с этим типом проблемы дизайна.В частности, если у вас есть много «вещей», которые немного отличаются, лучший способ создать множество классов, которые немного отличаются?
Заранее большое спасибо, Брайан
Редактировать: IЯ просто хотел добавить, чтобы было ясно, что существует конечное число устройств, параметры которых известны, поэтому было бы просто написать классы для всех типов, которые мне нужны.Мне просто интересно, есть ли лучший подход.