|
Модераторы: Partizan, gambit |
|
alexplato |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 81 Регистрация: 14.11.2010 Репутация: нет Всего: нет |
Немного о предметной области
Есть базовый класс DonorOptions. Буквально опции донора (источника данных). Теперь переметнемся сразу в текущую реализацию. ExcelShopFileDonorOptions – это опции для получения данных из файла Excel. При этом, что очень важно, это класс для получения данных, которые актуальны для интернет магазина (собственно все выше сказанное отражено в названии класса). Также стоит заметить, что свойства ExcelShopFileDonorOptions можно разделить на 2 категории. Свойства, связанные с файлом (например FilePath – путь к файлу), а также свойства связанные с тем, что данные актуальны для интернет магазина (например Currency – валюта). Мы понимаем, что и те, и другие свойства могут использоваться в других реализациях. По такому же принципу, например можно создать класс CSVShopFileDonorOptions. Соответственно свойства определены в базовых классах, от которых можно наследовать другие реализации. Это отобразил в UML: http://prntscr.com/dclqis Однако представим ситуацию, когда нам нужно создать реализацию класса опций для данных, актуальных для магазина, но есть одно НО. Данные берутся не из файла, а например из базы данных? Получается класс ShopFileDonorOptions мы уже использовать не сможем. Причина – в нем будут избыточные свойства (например FilePath), которые нам нафиг не нужны. Соотвественно придется определять новый базовый класс, в котором будет свойство Currency, но которые не будет наследоваться от FileDonorOptions. Напрашивается жгучее желание, использовать здесь “множественное наследование” , которое запрещено в C#. Соответственно, не вариант (насколько я понимаю). С другой стороны можно использовать интерфейсы (контракты по сути). Однако тут не удобно то, что нам в производных классах придется придется переопределять свойства интерфейсов. Как результат – дублирование кода. Собственно – как поступить правильно? |
|||
|
||||
mosquit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Здесь нужно воспользоваться не наследованием, а вложенными классами. Т.е. создать абстрактный класс (допустим, Options), в который в качестве свойств войдут классы DonorOptions и ShopOptions:
Options ---------------- Attributes +DonorOptions +ShopOptions Operations Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
mosquit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Здесь нужно воспользоваться не наследованием, а вложенными классами. Т.е. создать абстрактный класс (допустим, Options), в который в качестве свойств войдут классы DonorOptions и ShopOptions:
Options ---------------- Attributes +DonorOptions +ShopOptions Operations Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
mosquit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Здесь нужно воспользоваться не наследованием, а вложенными классами. Т.е. создать абстрактный класс (допустим, Options), в который в качестве свойств войдут классы DonorOptions и ShopOptions:
Options ---------------- Attributes +DonorOptions +ShopOptions Operations Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
mosquit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Здесь нужно воспользоваться не наследованием, а вложенными классами. Т.е. создать абстрактный класс (допустим, Options), в который в качестве свойств войдут классы DonorOptions и ShopOptions:
Options ---------------- Attributes +DonorOptions +ShopOptions Operations Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
mosquit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 7.2.2009 Репутация: нет Всего: нет |
Здесь нужно воспользоваться не наследованием, а вложенными классами. Т.е. создать абстрактный класс (допустим, Options), в который в качестве свойств войдут классы DonorOptions и ShopOptions:
Options ---------------- Attributes +DonorOptions +ShopOptions Operations Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |