Cześć.
Mam pytanie obnośnie tworzenia serwisów do obsługi zapisu i odczytu danych z kontekstu bazy danych. Do tej pory zapis i odczyt danych robiłem w kontrolerach api, jednak czasem logika była na tyle rozbudowana że kod w kontrolerze był ogromny i mało czytelny. Wydzieliłem całą logikę do serwisów obsługujących komunikację z bazą danych, ale tu się pojawia pewien problem. Nie zawsze potrzebuję zwrócić w akcji kontrolera cały obiekt jaki pozyskuję z bazy danych, czasem potrzebuję zwrócić do klienta obiekt customowy zawierający częściowe dane z dwóch tabel. Bezpośrednio w kontrolerze mogłem zwrócić customowy obiekt wygenerowany w select, gdzie wybierałem tylko określone właściwości które miały polecieć do klienta.
Co w przypadku serwisu, mogę zwrócić dowolny obiekt, ale wcześniej musi zostać on zadeklarowany. A więc czy tworzyć dla takich customowych obiektów customowe klasy opisujące kształt obiektu ? Dla przykładu dwie klasy opisujące dane w tabeli
public class Area
{
public int id { get; set; }
public string name { get; set; }
public string description { get; set; }
public string manager { get; set; }
public string location { get; set; }
public virtual List<Person> Persols { get; set; }
}
public class Person
{
public int id { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public int areaId { get; set; }
public Area Area {get; set; }
}
class CustoomPerson
{
public int id { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string areaName {get; set; } //<<właściwość name z obiektu Area
}
W tym przypadku CustoomPerson mogę podać jako typ zwracany z metody serwisu.
public class Servive: IService
{
public CustoomPerson GetPerson(string name)
{
//logika pobierająca dane z bazy danych
}
}
Tylko pytanie, czy to jest dobre podejście.