У своїй роботі у нас є кілька різних .net-додатків, які мають багато базових функціональних можливостей. Ми створили ці програми за допомогою чистої n-ярусної архітектури, але ми потрапили в той момент, коли зрозуміли, що повторно реалізували одні і ті ж функції кілька разів. Очевидно, це порушує DRY, і ми хотіли б це виправити. Ми вже використовуємо Nuget для успішного використання загального коду клею (підключення IoC, ведення журналів, налаштувань), але ми також хотіли б поділитися нашими даними та бізнес-шарами між усіма нашими програмами. Ідея полягає в тому, що інтерфейс користувача матиме справу лише з частинами бізнес-шару, які йому фактично потрібні.
Спочатку це здається прямою проблемою, але постійний розвиток може забезпечити деякі підводні камені, і ми не впевнені, як діяти далі. Скажімо, ми робимо наш єдиний бізнес-рівень, щоб правити їм усім. Для стислості я назву це «Фундація». Ми портуємо наші програми для використання фонду, і все працює чудово. Фундація поширюється на легкі шари інтерфейсу через nuget, і ми добре виглядаємо. Але потім ми починаємо додавати функції до наших програм, і ми стикаємося з проблемою.
Скажімо, ми працюємо над проектом A і додаємо нову функцію, яка потребує змін у Foundation. Ми вносимо зміни до фонду (Foundation-A) і висуваємо їх до нульового каналу як нестабільний пакет. Проект A отримує найновіший пакунок нута, і все добре. Тим часом, інший розробник працює над проектом B. Він отримує останній фонд від контролю джерел, але бере його від стабільної гілки, щоб у ньому не було змін Проекту А. Він вносить зміни і створив Foundation-B. І все добре. Але потім ми виявимо функціонал реалізації Foundation-A та Foundation-B, який фактично міг би ділитися кодом, тому ми їх поєднуємо. Тим часом Foundation-C пливе туди з власними змінами. Зрештою, Фонд-Б готовий до виробництва, тому ми його витісняємо. Але тоді нам потрібно оновити Виробництво A, B,
Здається, це могло б працювати, але ми стурбовані роботою з різними схемами баз даних і збереженням синхронізованого між різними гілками сховища Foundation, а також сховищами проектів A, B і C. Схоже, напевно знадобиться багато ручної роботи, що відкриває можливість помилок. Я хотів би, щоб це було максимально автоматизованим.
Ось стек, який ми використовуємо: C #, TFS з постійною інтеграцією, Nuget. Наші програми - це всі різні типи програм ASP.NET. Ми готові подивитися на різні SCM, якщо це полегшить ситуацію.
Я шукаю способи зберегти Нугет в розумі з нашими різними гілками вихідного коду. Ми не хочемо випадково впроваджувати код розробки у виробництво, оскільки ми посилаємося на неправильний Nuget Package.