Mam dwie podstawowe klasy Operation
i Trigger
. Każda z nich ma wiele podklas, które specjalizują się w określonych rodzajach operacji lub wyzwalaczy. A Trigger
może wyzwolić określony Operation
. Chociaż Operation
może być wyzwalany przez określony Trigger
.
Muszę napisać kod, który odwzorowuje dane Operation
dane Trigger
(lub odwrotnie), ale nie jestem pewien, gdzie je umieścić.
W takim przypadku kod nie należy wyraźnie do jednej lub drugiej klasy. Jeśli chodzi o zasadę pojedynczej odpowiedzialności, nie jestem pewien, gdzie powinien być kod.
Widzę trzy opcje, które wszystko by działały. Podczas gdy 1 i 2 wydają się być tylko wyborem semantyki, 3 reprezentuje zupełnie inne podejście.
- Na spuście, np
bool Triggers(Operation o)
. - Na operacji, np
bool TriggeredBy(Trigger t)
. - W zupełnie nowej klasie, która zarządza mapowaniem, np
bool MappingExists(Trigger t, Operation o)
.
Jak zdecydować, gdzie umieścić wspólny kod odwzorowania w odniesieniu do zasady pojedynczej odpowiedzialności?
Jak zarządzać pojedynczą odpowiedzialnością, gdy odpowiedzialność jest dzielona?
Edytuj 1.
Rzeczywisty kod wygląda tak. Wszystkie właściwości są albo string
, Guid
, collection<string>
, lub enum
. Zasadniczo są to po prostu małe fragmenty danych.
Edytuj 2.
Przyczyna zwrotu typu bool. Kolejna klasa będzie zużywać kolekcję Trigger
i kolekcję Operation
. Musi wiedzieć, gdzie istnieje mapowanie między a Trigger
, a Operation
. Wykorzysta te informacje do utworzenia raportu.