Mam dwie podstawowe klasy Operationi Trigger. Każda z nich ma wiele podklas, które specjalizują się w określonych rodzajach operacji lub wyzwalaczy. A Triggermoże wyzwolić określony Operation. Chociaż Operationmoże być wyzwalany przez określony Trigger.
Muszę napisać kod, który odwzorowuje dane Operationdane 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ę Triggeri kolekcję Operation. Musi wiedzieć, gdzie istnieje mapowanie między a Trigger, a Operation. Wykorzysta te informacje do utworzenia raportu.
