我正在开发一个 Web 应用程序,它使用 Angular 12 作为前端,使用 ASP.NET Core 6 作为后端。在我们的团队中,我们通常将任何东西写成 3 层应用程序(如果可能的话),由表示层、业务逻辑层和数据层组成。在这个项目的情况下,这意味着例如当某种类型的所有实体(我们称之为它Car
)从服务器请求时,会发生以下情况(简化):
请求到达
CarController.cs
控制器。这里的carManager
实例属于业务层,提供与汽车实体交互的功能(大部分是 CRUD)。依赖注入用于将carManager
实例注入控制器:public async Task<ActionResult<List<Car>>> GetCars() { List<Car> cars = await this.carManager.GetCarsAsync(); return this.Ok(cars); }
如果有任何业务逻辑相关,将
GetCarsAsync()
在carManager
. 然而,在许多情况下,这不是必需的。因此,我经常以像这样调用数据层的相应函数的“愚蠢”函数结束。本carAccessor
例中的 属于数据层。此处也使用依赖注入将其实例注入管理器:public async Task<ActionResult<List<Car>>> GetCarsAsync() { return this.carAccessor.GetCarsAsync(); }
然后在实体的相应访问器中完成对数据的实际查询。例子:
public async Task<List<Car>> GetCarsAsync() { List<Car> cars = new(); List<TblCar> dbCars = await this.Context.TblCars.ToListAsync(); foreach (TblCar dbCar in dbCars) { Car car = <AutoMapper instance>.Map<Car>(dbCar); cars.Add(car); } return cars; }
虽然这使得在应用程序中不混淆业务逻辑和数据访问变得很容易,但它确实创建了大量的代码,除了调用其他代码之外什么都不做。因此,在某些情况下,业务层只是因为懒惰而被省略,业务逻辑最终只是在其他地方实现,例如直接在控制器中实现。有一个简单的解决方案吗?