Kiedy tworzysz nowy zespół w .NET (Visual Studio)?

9

Pracuję nad aplikacją Silverlight. Podzieliłem go na kilka zespołów:

  • Domena
  • Repozytoria (wszystko z utrzymywaniem się w bazie danych Sterling)
  • Interfejs użytkownika
  • ...

Tak się nauczyłem, ale zastanawiałem się. Jeśli wiesz, że biblioteki DLL nie będą ponownie wykorzystywane, czy konieczne jest ich podzielenie? A może umieścisz wszystko w jednym zestawie i użyjesz folderów i przestrzeni nazw, aby utrzymać porządek?

Widziałem także projekty, które mają zbyt wiele zespołów. Zamiast używać przestrzeni nazw, w których byłoby to właściwe.

Więc: kiedy tworzysz nowy zespół dla jakiegoś nowego fragmentu kodu? Jakieś dobre zasoby na ten temat? I czy dzielisz kod pod względem technicznym (domena, dane, interfejs użytkownika itp.) I / lub funkcjonalnie (tj. Administracja pacjenta, pacjent-medycyna, logistyka szpitalna, ... - prawdopodobnie tylko w przypadku większych aplikacji na poziomie przedsiębiorstwa)?

Piotr
źródło

Odpowiedzi:

1

Polecam tworzenie osobnych zestawów dla klas, które logicznie należą do „modułów”. Jest to nie tylko dobre do ponownego użycia i konserwacji, ale także jest sposobem na wymuszenie jak najmniejszej zależności między klasami.

Misją będzie zminimalizowanie liczby odniesień do innych zestawów, które każdy zestaw potrzebuje, głównie poprzez interfejsy i zdarzenia. Posiadanie klas w różnych zestawach sprawi, że zależności będą bardzo oczywiste. Dla porównania, jeśli używasz tylko jednego zestawu, bardzo łatwo jest zaniedbać myślenie o zależnościach, ponieważ wszystko jest dostępne.

Oczywiście nie powinieneś przesadzać, ale w razie potrzeby rozdzielić. Pomyśl o tym w ten sposób: „Te klasy należą do siebie i nie muszą wiedzieć o tych klasach” i rozdzielają się według tych zasad

Homde
źródło
1
Zależy, co rozumiesz przez „moduły”, ale zwykle dzielę pokrewną logikę za pomocą przestrzeni nazw zamiast zestawów. Pamiętaj, że przestrzenie nazw mogą obejmować zespoły. Zespoły są jednostką wdrażania, dlatego należy rozważyć cięcie zespołów w celu dopasowania do scenariusza wdrażania.
Ed James,
3
To nie jest dobry pomysł. VS staje się bardzo powolny, gdy rozwiązanie zawiera więcej niż kilka projektów.
nikie
4
Jeśli twój VS staje się zbyt wolny, albo używasz starej wersji, albo powolnego komputera. Mam ogromne projekty z ponad 30 projektami, które kompilują się w kilka sekund. Z drugiej strony mam dużo pamięci RAM, rdzeni i dysku SSD :) Nie należy oczywiście przesadzać, ale tylko osobno, jeśli to stosowne, pomyśl o tym w ten sposób: „Te klasy należą do siebie i nie muszą wiedzieć o tych klasach” oraz rozdzielić w ten sposób
Homde,
Oznaczono to jako odpowiedź ze względu na uwagę na temat zależności. Odpowiedź Eda Jamesa jest co najmniej tak samo cenna i poprawna, ale ta odpowiedź bardziej pasuje do mojej sytuacji.
Peter
2
W następstwie tego podejścia może skończyć się z wieloma zespołami: A, B, C, D, E, F, G, H, I, J, K. Gdziekolwiek odwoływać montaż A, należy także odwołać swoje zespoły zależne: B, C, D. Ale zespół Cjest zależna od: E, F, G, Hwięc będziemy potrzebować tych zbyt. Kiedy więc potrzebujesz jakiejś funkcji, Amusisz rozebrać 7 dodatkowych zestawów, aby działała; upewniając się, że otrzymujesz poprawne wersje każdego zestawu. Witamy w nowej bibliotece DLL Hell.
Ed James
14

Zestaw jest jednostką wdrażania aplikacji .NET; dlatego należy rozważyć dopasowanie wycięcia zestawów do architektury wdrażania.

Zespoły są również przydatne, gdy potrzebna jest osobna kontrola wersji niektórych kodów. Na przykład, jeśli masz wspólne interfejsy, które skorzystałyby na niezależnej kontroli wersji, powinieneś rozdzielić ten kod na zestaw.

Pamiętaj, że przestrzenie nazw mogą obejmować zespoły. W wielu przypadkach wystarczy oddzielić zachowanie za pomocą przestrzeni nazw. Spójrz na .NET, mscorlib.dllktóry w jednym zestawie zawiera kod, który obejmuje szeroki wachlarz zachowań oddzielonych tylko przestrzenią nazw.

Jeśli chcesz mieć autorytet w tym temacie, nie szukaj dalej niż:

Wytyczne dotyczące projektowania ram

Wytyczne dotyczące projektowania ram: konwencje, idiomy i wzory dla bibliotek .NET wielokrotnego użytku (wydanie drugie) autorstwa Krzysztofa Cwaliny i Brada Abramsa.

Ed James
źródło
Dzięki za odniesienie do książki. Sprawdzę to. Czy mógłbyś rozwinąć architekturę wdrażania? Czym różni się wdrażanie 10 plików DLL od wdrażania 1? Chyba że jesteś w stanie zaktualizować jeden z dziesięciu plików, a pozostałe pozostają nietknięte?
Peter
1
@Peter: jeśli kodujesz 10 zestawów, które zawsze są wdrażane razem, możesz uprościć kontrolę wersji i wdrażanie, umieszczając cały kod w jednym zestawie. Jeśli 10 zestawów nie zawsze jest wdrażanych razem, przydatne mogą być oddzielne zestawy.
Ed James