ASP.NET MVC服务层输入输出数据

雪莉·德夫(SherleyDev)

我在项目中遵循带有服务层的存储库模式。对于每个视图,我将创建一个视图模型。

我感到困惑的是,服务层应该直接访问域对象并将其返回给控制器,还是应该使用DTO。如果我应该使用DTO,则将它们放在项目体系结构中的什么位置?

谢谢。

穆罕默德·梅切克

服务层通过实现适当的业务逻辑来负责将D对象和Domain对象映射(转换)

您的DTO对象应在控制器和服务中使用。

DTO在控制器和服务之间转移,而域对象在服务和存储库之间转移

控制器不了解域,存储库也不了解DTO。Service既了解DTO也了解Domain,并使用业务规则将它们相互转换,例如驾驶员与道路之间的汽车,您我之间的stackoverflow,一切,抽象...

以下代码是一个示例。考虑每个名称空间是一个包。

namespace Controllers
{
    using Services;
    using DataTransferObjects;

    public class CoffeeController
    {
        public ICoffeeService CoffeeService { get; set; }

        public JsonResult GetCoffee(GetCoffeeInDto inDto)
        {
            var result = CoffeeService.GetCoffee(inDto);
            return JsonResult(result);
        }

        public JsonResult SaveCoffee(SaveCoffeeInDto inDto)
        {
            var outDto = CoffeeService.SaveCoffee(inDto);
            return JsonResult(outDto);
        }
    }
}

namespace Services
{
    using DataTransferObjects;
    public interface ICoffeeService
    {
        GetCoffeeOutDto GetCoffee(GetCoffeeInDto inDto);
        SaveCoffeeOutDto SaveCoffee(SaveCoffeeInDto inDto);
    }
}

namespace Services.Impl
{
    using Services;
    using Repository;
    using DataTransferObjects;
    using Domain;

    public class CoffeeService : ICoffeeService
    {
        public ICoffeeRepository CoffeeRepository { get; set; }
        public GetCoffeeOutDto GetCoffee(GetCoffeeInDto inDto)
        {
            var entity = CoffeeRepository.Get(inDto.Id);
            return new GetCoffeeOutDto {Id = entity.Id, Name = entity.Name};
        }

        public SaveCoffeeOutDto SaveCoffee(SaveCoffeeInDto inDto)
        {
            var entity = new CoffeeEntity {Name = inDto.Name};
            CoffeeRepository.Save(entity);
            return new SaveCoffeeOutDto {Id = entity.Id};
        }
    }
}

namespace Repository
{
    using Domain;
    public interface ICoffeeRepository
    {
        CoffeeEntity Get(int id);
        void Save(CoffeeEntity coffeeEntity);
    }
}

namespace Repository.Impl
{
    using Repository;
    using Domain;

    public class CoffeeRepository:ICoffeeRepository
    {
        public CoffeeEntity Get(int id)
        {
            //get entity from db
            throw new System.NotImplementedException();
        }

        public void Save(CoffeeEntity coffeeEntity)
        {
            //insert entity into db
            throw new System.NotImplementedException();
        }
    }
}

namespace DataTransferObjects
{
    public class SaveCoffeeInDto
    {
        public string Name { get; set; }
    }

    public class SaveCoffeeOutDto
    {
        public int Id { get; set; }
    }

    public class GetCoffeeInDto
    {
        public int Id { get; set; }
    }

    public class GetCoffeeOutDto
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

namespace Domain
{
    public class CoffeeEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Model Validation in asp .net MVC

来自分类Dev

具有服务层和存储库层的ASP.NET MVC,应在哪里定义接口?

来自分类Dev

从UI层抽象ASP.NET MVC身份

来自分类Dev

使用Web服务作为数据访问层开发ASP.NET MVC应用程序

来自分类Dev

在ASP .NET MVC中存储会话数据

来自分类Dev

ASP中的异步Web服务。NET MVC

来自分类Dev

如何使表示层(ASP.NET MVC)的数据访问技术(Entity Framework)无知?

来自分类Dev

asp.net 5与asp.net mvc是否不同?

来自分类Dev

Asp.Net Mvc服务层

来自分类Dev

ASP.net Web Forms and Asp.net MVC Security

来自分类Dev

ASP.NET MVC,Actionlink

来自分类Dev

ASP.NET MVC服务层输入输出数据

来自分类Dev

从UI层抽象ASP.NET MVC身份

来自分类Dev

使用ASP.NET WebApi公开现有服务层

来自分类Dev

在ASP .NET MVC中存储会话数据

来自分类Dev

ASP中的异步Web服务。NET MVC

来自分类Dev

Asp.net MVC @RenderPage与数据

来自分类Dev

ASP.NET MVC服务层复杂授权

来自分类Dev

ASP.Net中数据访问层的静态方法

来自分类Dev

ASP.NET Web服务输出排序

来自分类Dev

ASP.net MVC路由

来自分类Dev

ASP .NET MVC Web服务和PostRepository

来自分类Dev

Asp.net Mvc身份

来自分类Dev

ASP.NET MVC:输出验证

来自分类Dev

ASP.NET MVC入门

来自分类Dev

具有 n 层架构的 Asp.Net MVC 项目

来自分类Dev

ASP.NET MVC 中的数据绑定

来自分类Dev

ASP.NET MVC 日期输入格式

来自分类Dev

asp.net Mvc _Layout