2008-09-19 18 views
92

Czym jest rozdzielenie obaw?
Co to jest problem?
W jaki sposób można podzielić aplikację na te "różne problemy"?Czym jest rozdzielenie obaw?

+0

Prosimy zapoznać się z często zadawanymi pytaniami dotyczącymi prawidłowego tworzenia pytań. – FlySwat

+0

Ten artykuł jest niesamowity: https://www.viget.com/articles/client-side-separation-of-concerns-are-we-doing-it-wrong i obejmuje rozdział spraw w naprawdę przyjemny sposób. – Costa

Odpowiedz

88

Obawy są różne aspekty funkcjonalności oprogramowania. Na przykład "logika biznesowa" oprogramowania jest problemem, a interfejs, za pomocą którego dana osoba stosuje tę logikę, jest inna.

Oddzielenie obaw jest oddzielne dla każdego z tych problemów. Zmiana interfejsu nie powinna wymagać zmiany kodu logiki biznesowej i odwrotnie.

Wzornictwo wzorcowe modelu MVC jest doskonałym przykładem rozdzielenia tych obaw na lepszą konserwowalność oprogramowania.

Aby uzyskać więcej informacji:

+0

Ta odpowiedź wymaga aktualizacji tych dni. Moim zdaniem dotyczy enkapsulacji lub abstrakcji problemu. Niektórzy mogą myśleć o CSS, JS jako o jednej sekcji, o ile zawierają konkretny problem. To jest do zaakceptowania w te dni. Leonardo C – Leonardo

+1

W rzeczywistości MVC jest dobrym przykładem braku zdania o rozdzielaniu spraw, ponieważ kontroler musi dobrze wiedzieć wszystko o modelu i widoku. –

4

Wikipedia:

W informatyce oddzielenie dotyczy (SoC) to proces łamania program komputerowy do różnych funkcji, które zachodzą na siebie w funkcji w jak najmniejszym stopniu. Niepokojący jest każdy element zainteresowania lub koncentracja w programie. Zwykle obawy są równoznaczne z funkcjami lub zachowaniami. Postęp w kierunku SoC jest tradycyjnie osiągany poprzez modułowość i enkapsulację, przy pomocy ukrywania informacji.

Zamieszczam to nie po to, aby zyskać przedstawiciela, ale zastanawiam się, dlaczego zadajesz pytanie, na które można tak łatwo odpowiedzieć.

12

http://en.wikipedia.org/wiki/Separation_of_concerns

W informatyce oddzielenie dotyczy (SoC), to proces łamania program komputerowy do różnych funkcji, które zachodzą na siebie w funkcji w jak najmniejszym stopniu. Niepokojący jest każdy element zainteresowania lub koncentracja w programie. Zwykle obawy są równoznaczne z funkcjami lub zachowaniami. Postęp w kierunku SoC jest tradycyjnie osiągany poprzez modułowość i enkapsulację, przy pomocy ukrywania informacji.

1

Zasada ta stwierdza, że ​​dany problem dotyczy różnego rodzaju problemów, które powinny zostać zidentyfikowane i oddzielone, aby poradzić sobie ze złożonością, a do osiągnięcia wymaganych technicznych czynników jakościowych, takich jak wytrzymałość, zdolność adaptacji, konserwacji i ponownego użycia. Link

2

naprawdę nie odpowiedzi na swoje pytanie, ale jeśli jesteś zainteresowany w tym, tam jest powiązany wzorzec projektowy o nazwie Dependency Inwersja.

Załóżmy, że masz klasę z metodą, na którą należy wpłynąć spoza klasy, lub potrzebujesz jej wielu implementacji lub fakt, że jest to metoda tej klasy utrudnia testowanie jednostek. Możesz umieścić tę metodę w całkowicie oddzielnej klasie i przekazać instancję pierwszej klasy jako parametr.

Jest to szczególnie użyteczne w przypadku korzystania z interfejsów próbnych . Metodę można przetestować, przekazując w mocks drugiej klasie zakodowane wartości i oczekiwane wyniki.

+0

Myślę, że chodziło o zastrzyk uzależnienia. –

+0

Odnośnie tych terminów, patrz Wikipedia: [Dependency Injection] (https://en.wikipedia.org/wiki/Dependency_injection) | [Inwersja kontroli] (https://en.wikipedia.org/wiki/Inversion_of_control) | [Inversion Inversion] (https://en.wikipedia.org/wiki/Dependency_inversion_principle). –

41

Wiesz o HTML i CSS? To oddzielenie obaw.

Plik HTML (prawdopodobnie XML) określa strukturę dokumentu. Plik CSS określa sposób wyświetlania dokumentu na ekranie.

+4

Dobry przykład! Można go łatwo dostosować do różnych programów, oddzielając logikę kontrolera od warstwy prezentacji (ok, trywialny przykład). –

6

To jest opisane w Wikipedii: http://en.wikipedia.org/wiki/Separation_of_concerns

Jest to wartość podana w pojedyncze Responsibility Principle, że funkcja/klasy/metoda powinna zrobić tylko jedno. Że powinien zrobić to wszystko, zrobić to dobrze i zrobić to tylko.

Zasadniczo oznacza to, że nie powinieneś mieszać swoich pomysłów w grudkowatą warstwę, ale powinieneś oddzielić swoje pomysły w sposób czysty. Jeśli nie, trudno jest zmienić, przetestować lub debugować kod. Jeśli je rozdzielisz, będziesz miał możliwość zmiany. Na przykład, jeśli zmodyfikujesz generator html za pomocą zapytania, trudno będzie zmienić formatowanie, a trudno będzie Ci przełączyć się na inne zapytanie. Jeśli je rozdzielisz, wtedy obie te rzeczy staną się proste. Lub przynajmniej łatwiej.

0

Dane mogą być reprezentowane na wiele różnych sposobów, a jeśli możemy przetłumaczyć reprezentacje, nie ma znaczenia, którą reprezentację wybieramy, ponieważ powinniśmy mieć możliwość dostępu do tych danych i manipulowania nimi. Gdybyśmy mieli uniwersalnego tłumacza języka, nie miałoby znaczenia, gdyby ktoś powiedział nam czas w języku francuskim, niemieckim lub arabskim; nasza umiejętność tłumaczenia zapewni, że będziemy znać czas. W kategoriach danych ważne są trzy kluczowe reprezentacje:  fizyczne przedstawienie miejsca i sposobu przechowywania danych;  logiczne przedstawienie, jakie dane mogą być przechowywane, ich semantyka i związki z innymi danymi;  i reprezentacja zewnętrzna, tak jak wygląda dla użytkowników. Zakładając, że możliwe jest tłumaczenie między różnymi reprezentacjami, ludzie mogą zrozumieć i używać danych w preferowany sposób. Tak więc, na poziomie fizycznym technik baz danych mógłby zoptymalizować fizyczne przechowywanie danych niezależnie od logicznego opisu lub zewnętrznego opisu, pod warunkiem, że dostosował przechowywany opis i tłumaczenie między reprezentacjami. Oddzielając te obawy, możliwe staje się budowanie zbiorów danych ogólnego przeznaczenia, które mogą być używane przez różnych użytkowników o różnych wymaganiach i którzy używają różnych reprezentacji, bez konieczności duplikowania danych. Będziemy wracać do tych cech w trakcie tego kursu.