Komplexe Geschäftslogik geht normalerweise in eine Service-Schicht. Ein Dienst kann von einem oder mehreren Repositorys abhängen, um CRUD-Vorgänge an Ihren Modellen durchzuführen. Somit kann eine einzelne Dienstoperation, die eine Geschäftsoperation repräsentiert, von mehreren einfachen Operationen abhängen. Dann könnten Sie diese Service-Schicht in Ihren Controllern und anderen Anwendungen wiederverwenden.
Offensichtlich sollte Ihr Dienst nicht von bestimmten Repository-Implementierungen abhängig sein. Um eine schwächere Kopplung zwischen der Service-Schicht und den Repositories zu ermöglichen, könnten Sie Schnittstellen verwenden. Hier ein Beispiel:
public interface IProductsRepository { }
public interface IOrdersRepository { }
...
public interface ISomeService
{
void SomeBusinessOperation();
}
public class SomeServiceImpl: ISomeService
{
private readonly IProductsRepository _productsRepository;
private readonly IOrdersRepository _ordersRepository;
public SomeServiceImpl(
IProductsRepository productsRepository,
IOrdersRepository ordersRepository
)
{
_productsRepository = productsRepository;
_ordersRepository = ordersRepository;
}
public void SomeBusinessOperation()
{
// TODO: use the repositories to implement the business operation
}
}
Jetzt alles, was übrig bleibt, ist Ihr DI Rahmen konfigurieren, dass diese spezifischen Dienst in Ihrem Controller zu injizieren.
public class FooController : Controller
{
private readonly ISomeService _service;
public FooController(ISomeService service)
{
_service = service;
}
public ActionResult Index()
{
// TODO: Use the business operation here.
}
}
Sie können sehen, wie Schnittstellen uns eine schwache Kopplung zwischen den Schichten ermöglichen. Die gesamte Installation wird vom DI-Framework durchgeführt und alles ist transparent und leicht testbar.
Darin, in diesem Zusammenhang, was der beste Weg ist, verschiedene Repositories zugreifen von einem einzigen Dienst? Kannst du mir bitte auch mitteilen, welche Lösung ein IoC/DI wäre? – Chandu
Vielen Dank Darin! –
Danke für die Erklärung Darin – Chandu