Zwykle używam warstwy usług podczas tworzenia aplikacji ASP.NET MVC. Jest podobny do wzorca warstwy usług, który Martin Fowler omawia w książce Patterns of Enterprise Application Architecture . Hermetyzuje logikę biznesową i sprawia, że kontrolery są dość cienkie. Zasadniczo kontrolery używają warstwy usług do pobierania modeli domeny, które są następnie przekształcane w modele widoków. Używam również wzorca projektowego jednostki pracy do obsługi transakcji i wzorca projektowego repozytorium do hermetyzacji warstwy dostępu do danych w celu łatwiejszego testowania jednostkowego i możliwości łatwej wymiany ORMów. Ten rysunek przedstawia typowe warstwy, których używam w aplikacji MVC.
Warstwa usług jest oznaczona na tym diagramie jako „Warstwa aplikacji lub domeny”, ponieważ uważam, że ludzie są zdezorientowani, gdy używa się terminu „Warstwa usług”. Często myślą, że jest to usługa internetowa. W rzeczywistości jest to zestaw, który może być używany przez Twoją ulubioną technologię usług internetowych, na przykład ASP.NET Web API lub WCF, a także kontroler.
Jeśli chodzi o konwencje nazewnictwa, zwykle używam czegoś, co opisuje domenę, po której następuje usługa. Na przykład, jeśli mam warstwę usług, która obsługuje członkostwo użytkowników, miałbym klasę o nazwie MembershipService, która zawiera wszystkie metody potrzebne kontrolerom i usługom sieci Web do wykonywania zapytań i manipulowania domeną członkostwa. Pamiętaj, że możesz mieć kilka domen w tej samej aplikacji, więc możesz mieć wiele warstw usług. Chodzi mi o to, że nie musisz mieć jednej monolitycznej usługi, która zajmuje się całą aplikacją.