Коли ви створюєте нову збірку в .NET (Visual Studio)?


9

Я працюю над додатком Silverlight. Я розділив його на кілька збірок:

  • Домен
  • Сховища (все, що зберігається в базі даних Sterling)
  • UI
  • ...

Ось як я це навчився, але задумався. Якщо ви знаєте, що DLL не збираються повторно використовувати, чи потрібно їх розділити? Або ви могли б скласти все в одну збірку і використовувати папки та простори імен, щоб це було впорядковано?

Я також бачив проекти, у яких занадто багато збірок. Замість використання просторів імен там, де це було б доречно.

Отже: коли ви створюєте нову збірку для якогось нового фрагмента коду? Якісь хороші ресурси з цього питання? А ви розділяєте код технічно (домен, дані, користувальницький інтерфейс тощо) та / або функціонально (наприклад, адміністрація пацієнтів, пацієнт-медик, лікарня-логістика, ... - ймовірно, лише для великих програм на рівні підприємств)?

Відповіді:


1

Я рекомендую створити окремі збірки для класів, які логічно потрапляють у "модулі". Це не тільки корисно для повторного використання та обслуговування, але це також спосіб застосувати найменшу кількість залежностей між класами.

Місією буде мінімізувати кількість посилань на інші збори, необхідні кожній асамблеї, в основному це буде здійснюватися через інтерфейси та події. Навчання в різних зборах зробить залежності дуже очевидними. На противагу цьому, якщо ви просто використовуєте одну збірку, то дуже легко нехтувати думкою про залежності, оскільки все доступно.

Звичайно, ви не повинні перебільшувати, а розділяти, де це доречно. Подумайте про це так: "Ці класи належать разом і не потрібно знати про ці класи" та розділіть їх уздовж цих рядків


1
Залежить від того, що ви маєте на увазі під "модулями", але я зазвичай поділяю пов'язану логіку, використовуючи простори імен, а не збірки. Пам'ятайте, що простори імен можуть охоплювати збірки. Асамблеї - це одиниця розгортання, тому вам слід розглянути можливість складання збірок відповідно до сценарію розгортання.
Ед Джеймс

3
Не гарна ідея. VS стає дуже млявим, коли рішення містить більше кількох проектів.
nikie

4
Якщо ваш VS стає занадто млявим, ви або використовуєте стару версію або повільний комп'ютер. У мене величезні проекти з 30+ проектами, які складаються за лічені секунди. Тоді знову в мене є багато оперативної пам’яті, ядер і SSD :) Ви, звичайно, не варто перебільшувати, а лише розділяти, де це доречно, думати про це так: «Ці класи належать разом і не потрібно знати про ці класи» та відокремте за цими лініями
Хомде

Позначив це як відповідь через зауваження про залежності. Відповідь Еда Джеймса принаймні така ж цінна і правильна, але ця відповідь більше стосується моєї ситуації.
Пітер

2
При такому підході ви могли б у кінцевому підсумку з купою збірок: A, B, C, D, E, F, G, H, I, J, K. Де б ви не посилання на вузол A, ви повинні також посилатися на залежні збірки: B, C, D. Але збірка Cзалежить від: E, F, G, Hтому ми будемо мати потребу в тих , хто теж. Отже, коли вам потрібна якась функція, Aви повинні зняти 7 додаткових збірок, щоб вона працювала; переконайтеся, що ви отримуєте правильні версії кожної збірки. Ласкаво просимо до нового пекла DLL.
Ед Джеймс

14

Збірка - це одиниця розгортання для додатка .NET; тому слід розглянути можливість узгодження розрізу вашої збірки з архітектурою розгортання.

Збори також корисні, коли вам потрібен окремий контроль версій на якомусь коді. Наприклад, якщо у вас є спільні інтерфейси, які мали б користь від незалежного контролю версій, вам слід розділити цей код на збірку.

Пам'ятайте, що простори імен можуть охоплювати збірки. У багатьох випадках досить розділити поведінку за допомогою просторів імен. Подивіться на .NET, mscorlib.dllщо в одній збірці міститься код, який охоплює величезний масив поведінки, розділений лише простором імен.

Якщо ви хочете мати певні повноваження з цього приводу, не дивіться далі:

Рамкові рекомендації щодо проектування

Керівні принципи дизайну рамок: конвенції, ідіоми та зразки для багаторазових бібліотек .NET (2-е видання) Кшиштофа Кваліна та Бреда Абрамса.


Дякую за довідку про книгу. Я це перевірю. Не могли б ви детальніше розробити архітектуру розгортання? Чим розгортання 10 файлів DLL відрізнятиметься від розгортання 1? Якщо ви не можете оновити один з десяти файлів, а інші залишаються недоторканими?
Пітер

1
@Peter: якщо ви закодували 10 збірок, які завжди розгортаються разом, ви могли б спростити контроль версій та розгортання, вклавши весь код в одну збірку. Якщо 10 збірок не завжди розгортаються разом, то може бути корисним наявність окремих збірок.
Ед Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.