DDD实战1
1.创建空白解决方案
2.创建Infrastructure解决方案文件夹
3.在Infrastructure解决方案文件夹下面 添加一个新的项目
这个项目是 .net core的类库项目,取名Util,asp.net core的配置文件的信息是经常使用的信息,所以要建一个关于其配置文件读写的类 AppSetting.cs
和asp.net不同 core的配置文件是json,前者是config的xml文件。读写webapi的json文件的key对应的value 需要引入一个IConfigurationSection类型,这个类型需要引入Nuget包Microsoft.Extension.Configuration。在这个类中封装一个读json的方法,代码如下:
using Microsoft.Extensions.Configuration; namespace Util
{ public class AppSetting
{
//之所以搜使用静态类,是因为这是一个工具类
public static IConfigurationSection appsections = null;
public static void SetAppSetting(IConfigurationSection section)
{
appsections = section;
} /// <summary>
/// 根据key从配置文件中读取key对应的value
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetAppSetting(string key)
{
string str = "";
if (appsections.GetSection(key) != null)
{
str = appsections.GetSection(key).Value;
}
return str; }
}
}
4 在返回数据给webapi的时候,应该封装一个专门的数据类型给webapi,为此新建一个ResultEntity类ResultEntity.cs,代码如下:
namespace Util
{
/// <summary>
/// 返回给webapi使用的数据实体
/// </summary>
/// <typeparam name="T">视图模型的类型</typeparam>
public class ResultEntity<T>
{
public bool IsSuccess { get; set; }
//附带信息
public string Msg { get; set; }
public T Data { get; set; }
public int ErrorCode { get; set; } /// <summary>
/// 如果T是一个List集合 这里可以存数据的条数
/// </summary>
public int count { get; set; } }
}
封装一个应用服务基类,这个基类提供返回上面ResultEntity类型数据的方法,使得继承了上面基类的应用服务 统一返回ResultEntity给webapi
using System; namespace Util
{
/// <summary>
/// 所有应用服务的积基类
/// </summary>
public class BaseAppSrv
{
/// <summary>
/// 所有应用服务的基类都要返回数据给webapi 这里做一个封装
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="vobj"></param>
/// <param name="msg"></param>
/// <param name="errorcode"></param>
/// <returns></returns>
protected ResultEntity<T> GetResultEntity<T>(T vobj,string msg="未成功获取到对象",int errorcode=)
{
ResultEntity<T> resultEntity = new ResultEntity<T>();
var issuccess = true;
if (vobj is int&& Convert.ToUInt32(vobj)<)
{
issuccess = false;
}
else if(vobj is bool&& !Convert.ToBoolean(vobj))
{
issuccess = false;
}
else if(vobj is string && string.IsNullOrEmpty(Convert.ToString(vobj)))
{
issuccess = false;
}
if (issuccess==false)
{
resultEntity.Msg = msg;
resultEntity.ErrorCode = ;
}
resultEntity.IsSuccess = issuccess;
resultEntity.Data = vobj;
return resultEntity;
}
}
}
DDD实战1的更多相关文章
- DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)
要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...
- DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)
从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...
- DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化. 首先大家需要明确的是,产品上下文 ...
- DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)
这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...
- DDD实战进阶第一波(九):开发一般业务的大健康行业直销系统(实现经销商上下文仓储与领域逻辑)
上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现. 关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述. 因为在经 ...
- DDD实战进阶第一波(十):开发一般业务的大健康行业直销系统(实现经销商登录仓储与逻辑)
上一篇文章主要讲了经销商注册的仓储和领域逻辑的实现,我们先把应用服务协调完成经销商注册这部分暂停一下,后面文章统一讲. 这篇文章主要讲讲经销商登录的仓储和相关逻辑的实现. 在现代应用程序前后端分离的实 ...
- DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)
前两篇文章主要实现了经销商代注册的仓储与领域逻辑.经销商登录的仓储与相关逻辑,这篇文章主要讲述经销商代注册的用例与经销商登录的查询功能. 一.经销商代注册用例 在经销商代注册用例中,我们需要传递经销商 ...
- DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)
本系列文章 DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述) DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一) 近年来,关于如何开发基于 ...
- DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)
前面我们花了14篇的文章来给大家介绍经典DDD的概念.架构和实践.这篇文章我们来做一个完整的总结,另外生成一个Api接口文档. 一.DDD解决传统的开发的几大问题: 没有描述需求的设计模型:而是直接通 ...
- DDD实战进阶第一波(十四):开发一般业务的大健康行业直销系统(订单上下文应用服务用例与接口)
上一篇文章我们主要讲了订单上下文的领域逻辑,在领域逻辑中完成了订单项的计算逻辑.订单的计算逻辑以及如何生成相应的实体code,这篇文章我们通过 在应用服务中实现一个下单的用例,来将这些领域逻辑以及仓储 ...
随机推荐
- 不可摸数 【杭电-HDOJ-1999】 附题
/* hdu 1999 不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- jQuery和CSS3炫酷GOOGLE样式的用户登录界面
这是一款使用jQuery和CSS3打造的GOOGLE样式的用户登录界面特效.该登录界面特效中,右上角的小问号和错误提示小图标使用SVG来制作.username和password输入框採用浮动标签特效. ...
- swift学习第十五天:闭包
闭包 闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 block和闭包都经常用于回调 注意:闭包和block一样,第一次使用时可能不习 ...
- pstack.sh 改进版
pstack.sh 改进版本 #!/bin/bash if (( $# < 1 )) ; then echo "usage: `basename $0` pid" 1> ...
- 从源码角度实现一个自己的Promise
原文链接:https://geniuspeng.github.io/2017/12/14/my-promise/ 关于Promise的概念以及意义就不在这里介绍了,最近看到了一些实现Promise的核 ...
- Write Code As If You Had to Support It for the Rest of Your Life
Write Code As If You Had to Support It for the Rest of Your Life Yuriy Zubarev YOU COULD ASK 97 PEOP ...
- RabbitMQ 服务
RabbitMQ 使用场景一 安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平 ...
- 本人录制的视频资源(C/C++、Go、Qt、Linux等)
持续更新-- 编程语言 C语言开发实战:http://pan.baidu.com/s/1qXAP4x2 C语言贪吃蛇:https://pan.baidu.com/s/1pLRZIuJ C提高:http ...
- activiti自己定义流程之整合(五):启动流程时获取自己定义表单
流程定义部署之后,自然就是流程定义列表了,但和前一节一样的是,这里也是和之前单独的activiti没什么差别.因此也不多说.我们先看看列表页面以及相应的代码,然后在一步步说明点击启动button时怎样 ...
- ppt转flash kindeditor上传视频全屏问题
最近要增加页面的ppt显示功能,于是考虑把ppt转成flash,在网上搜到了ispingfree,链接: https://pan.baidu.com/s/1QZzx6qmdsnwzWCuULXzUOw ...