在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在一些不同的示例教程中,我们可能看到 DAL 的实现在主项目中,并且每个控制器中都有实例。我们不建议这么做。 当我们编写 DAL 时,我们应该将其作为一个独立的服务来创建。在 .NET Core 项目中,这一点很重要,因为当我们将 DAL 作为一个独立的服务时,我们就可以将其直接注入到 IOC(控制反转)容器中。IOC 是 .NET Core 内置功能。通过这种方式,我们可以在任何控制器中通过构造函数注入的方式来使用。 public class OwnerController: Controller { private IRepository _repository; public OwnerController(IRepository repository) { _repository = repository; } }
控制器应该始终尽量保持整洁。我们不应该将任何业务逻辑放置于内。 因此,我们的控制器应该通过构造函数注入的方式接收服务实例,并组织 HTTP 的操作方法(GET,POST,PUT,DELETE,PATCH...):
public class OwnerController : Controller { private readonly ILoggerManager _logger; private readonly IRepository _repository; public OwnerController(ILoggerManager logger, IRepository repository) { _logger = logger; _repository = repository; } [HttpGet] public IActionResult GetAllOwners() { } [HttpGet("{id}", Name = "OwnerById")] public IActionResult GetOwnerById(Guid id) { } [HttpGet("{id}/account")] public IActionResult GetOwnerWithDetails(Guid id) { } [HttpPost] public IActionResult CreateOwner([FromBody]Owner owner) { } [HttpPut("{id}")] public IActionResult UpdateOwner(Guid id, [FromBody]Owner owner) { } [HttpDelete("{id}")] public IActionResult DeleteOwner(Guid id) { } }
我们的 Action 应该尽量保持简洁,它们的职责应该包括处理 HTTP 请求,验证模型,捕捉异常和返回响应。 [HttpPost] public IActionResult CreateOwner([FromBody]Owner owner) { try { if (owner.IsObjectNull()) { return BadRequest("Owner object is null"); } if (!ModelState.IsValid) { return BadRequest("Invalid model object"); } _repository.Owner.CreateOwner(owner); return CreatedAtRoute("OwnerById", new { id = owner.Id }, owner); } catch (Exception ex) { _logger.LogError($"Something went wrong inside the CreateOwner action: { ex} "); return StatusCode(500, "Internal server error"); } }
在大多数情况下,我们的 action 应该将 使用最多的方法是:
|
请发表评论