2011-09-25 11 views
6

W porządku, to od dawna już mi chodzi. Jestem w trakcie tworzenia wielorazowego korporacyjnego obszaru nazw (biblioteki klas) dla wszystkich popularnych obiektów warstwy pośredniej. Do tego zestawu można się odwołać przez dowolnego z naszych programistów podczas fazy projektowania ich projektu. Oto moje pytanie. Czy bardziej dopuszczalne jest utworzenie pojedynczego zestawu, który składa się z całej naszej logiki warstwy pośredniej lub aby podzielić tę funkcjonalność na mniejsze złożenia?Najlepsza praktyka podczas tworzenia wielorazowego korporacyjnego obszaru nazw

przykład: pojedynczy zespół (przykłady namespace)

systemowe

System.IO

System.IO.RegEx

System.Net

System.Net. Poczta

System.security

system.Web - AssemblyFull.dll

przykład: Różne zwoje

System.IO

System.IO.Reg - Sporządza się AssemblyIO.dll

System.Net

System.Net - gromadzi do AssemblyNet.dll

W przeszłości robiłem to za pomocą obu metod, ale zastanawiam się, co wszyscy inni nie i dlaczego? Nie szukam przykładów kodu, chcę tylko wiedzieć, co robią inni deweloperzy?

Z góry dziękuję.

+0

Jak duży byłby zespół, gdyby zawierał wszystko? Czy spodziewasz się, że projekty w Twojej firmie będą korzystać ze wszystkich typowych funkcji? Jeśli nie, czy logicznie można je podzielić na powiązane podjednostki (które mogłyby wtedy być dobrymi kandydatami do składania różnych zespołów)? –

+0

google dla zasady ponownego użycia/wydania równoważności – driushkin

+0

Richard - Zespół [pełny] będzie składał się z setek obiektów. Większość projektów zawsze wykorzystuje 75% -85% wyeksponowanej funkcjonalności, ale może nadal używać innych elementów. Moją początkową myślą było poradzić sobie z tym tak, jak pan stwierdził. Weź najczęściej używane obiekty i zbuduj je w zwykłym zespole, a następnie weź inne przedmioty i podziel je na osobne jednostki. Ale z drugiej strony widzę, jak pojedyncze zgromadzenie może ułatwić życie innym programistom. Będziesz musiał tylko odwołać się do zespołu pośredniego i skończyć z nim. Mam przeczucie, że to 6 do 1 pół tuzina dla drugiego –

Odpowiedz

4

Zasadniczo używam do oddzielania złożeń, jeśli nie są sprzężone jawnie. Na przykład, jeśli masz interfejs sieciowy niskiego poziomu i inne operacje związane z API dla FTP, prawdopodobnie te późniejsze zależą od tego pierwszego; ale dla użytkownika API twoi programiści; nie ma potrzeby posiadania obu w jednym zespole; może jeden projekt nie wymaga interfejsu API FTP, więc musi zawierać tylko rdzeń "Net". Możesz oddzielić API, aby być bardziej atomistą, jak to możliwe, i unikać deweloperów, aby dołączyć duży zespół, gdy będą używać tylko niewielkiej jego części.

Wadą tego podejścia jest to, że jeśli deweloper potrzebuje zespołu FTP, to musi on również zawierać Netto; więc musisz znaleźć sposób na zarządzanie tymi zależnościami, które zmniejszają złożoność dla programistów. Używam Maven (from Apache) podczas wykonywania aplikacji Java, ale do tej pory nie znam dobrego maven-like alternative for .NET.

Ale jeśli budujesz kilka interfejsów API dla swojej firmy, z witryną Wiki lub innym narzędziem do ważenia dokumentów, możesz rozwiązać ten problem.

+0

Lorenzo - dzięki za szybką reakcję. Po raz pierwszy usłyszałem o Mavenie, brzmi całkiem fajnie. Im więcej myślę o tym, jak rozbija moje przedmioty, ma sens. Rozdzielając je tak bardzo, jak to możliwe. Jeśli jeden z programistów potrzebuje dostępu do funkcji poczty e-mail, nie ma powodu, aby obiekty kryptograficzne były widoczne/dostępne. Dzięki za wszystkie szybkie odpowiedzi faceci, naprawdę doceniam otrzymywanie danych od innych. Poza tym widzę, że nie jestem jedynym, który pracuje w niedzielę. –

+0

@lorenzo NuGet (www.nuget.org) jest tak blisko, jak masz zamiar dostać się do Maven na .NET – x0n

+0

@xOn Tks, ocenię Nuget ... –

1

Nie sądzę, że to słuszna odpowiedź, ale używam wspólnego podejścia do nazewnictwa dla wszystkich naszych bibliotek.

Mam bibliotekę, która obsługuje wiele funkcji middle-tier, podobnie jak zwykłe zadania, których używa większość aplikacji.

Web.CreditCard
Web.CreditCard.Authorization
Web.CreditCard.Charge
Web.CreditCard.Batch

Web.Store.Order
Web.Store.Entities
Web.Store. Koszyk
Web.Store.Auth

Web.User.Auth.OpenID
Web.User.Auth.OAuth
Web.User.Account
Web.User.Preferences

Więc to nie ma znaczenia, jaki rodzaj projektu Twój budynek można je ponownie wykorzystać i zidentyfikować ich bardzo szybko. Niektóre z nich mają własne interfejsy i mogą być dziedziczone i przeciążane w celu dodania większej funkcjonalności w zależności od wymagań projektu.

+0

To jest prawie dokładnie to, na co patrzę w naszym repozytorium. Po prostu chciałem, aby było to tak łatwe, jak to tylko możliwe dla innych programistów. Mam zamiar posunąć naprzód wspólny zestaw, który będzie używany dla wszystkich projektów, a następnie oddzielne złożenia dla mniej powszechnej funkcjonalności. Dziękuję wszystkim, którzy tak szybko do mnie wrócili, naprawdę to doceniam. –

0

Dziękuję wszystkim, którzy odpowiedzieli na to pytanie. Ponieważ każdy projekt jest inny i prawie niemożliwe jest wymyślenie poprawnej odpowiedzi, opiszę, jak zamierzam się do tego podejść.

pierwsze:

muszę zidentyfikować/obiektów middle-tier idą biznesu do wykorzystania we wszystkich projektach posuwa się naprzód. Po nich zostały zidentyfikowane będę tworzyć zespół [przedsiębiorstwo] .Pokój dzienny lub [spółki] .common.util. Będą one odnosić się do każdego z naszych obecnych i przyszłych projektów.

drugie:

zidentyfikować obiekty, które są bardziej specyficzne dla projektu. Zespoły te mogą lub nie mogą być przywoływane. Przykładem może być [firma] .security.cryptography.

trzecie:

Upewnij się, że każdy obiekt jest dobrze udokumentowane, tak aby w przyszłości deweloperzy będą mieli wiedzę potrzebną do prawidłowego utrzymania i odniesienie do właściwych zespołów.

Chciałbym podziękować wszystkim, że tak szybko do mnie wrócili. To był mój pierwszy wpis na SO, ale mogę was zapewnić, że wkrótce znów się tu spotkacie. Dzięki jeszcze raz.

+1

Ja nie lubię używać nazwy firmy w przestrzeni nazw, pracowałem z Verizonem i wieloma przestrzeniami nazw, gdzie Verizon.[Nazwa] i teraz ten fragment firmy nie ma już nazwy Verizon, ale nadal ma tam tę przestrzeń nazw. –

+0

Ważny punkt. Zazwyczaj używam nazwy firmy ze względu na fakt, że zwykle wykonujemy jakąś formę integracji, w której łatwiej jest określić, skąd pochodzi zestaw. Jeśli tworzysz ogólną przestrzeń nazw, co używałbyś jako swojego najwyższego poziomu? –

0

Użyłem innego podejścia do plików wielokrotnego użytku.

utworzyć oddzielną rozwiązanie, które zawiera wszystkie komponenty wielokrotnego użytku, testować itp

Każdy wielokrotnego użytku „rzecz” (klasa, funkcji UserControl, ikona, etc) jest w oddzielnym pliku.

Projekty wymagające funkcjonalności z części do ponownego wykorzystania po prostu łączą się bezpośrednio z plikiem źródłowym. ("Dodaj istniejący element", "Dodaj jako link"). Dla wygody umieścić wszystkie ponowne wykorzystanie części w „narzędzia” w folderze VS (folder prawdziwe narzędzia jest pusta, ponieważ pliki są powiązane)

Taka konfiguracja pozwala mi:

  • wystarczy dodać wspólną funkcjonalność I potrzebują
  • bez dodatkowych zależności
  • poprawki użyteczności są automatycznie uwzględniane w następnym kompilacji

Jedyną wadą jest to, że jeśli trzeba ręcznie dodać dowolną Depe Dostarczone dodatkowe funkcje (np. inny komponent wielokrotnego użytku lub zespół)

Ponieważ nie używam różnych zespołów, przestrzeń nazw tylko następujące funkcje:

  • Company.Utilites
  • Company.Utilites.WPF
  • Company.Utilites .IO
Powiązane problemy