ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net
在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作。要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利。
系统结构

整个系统工程结构如上,基于传统的三层架构模式(不太懂的快去恶补一下)
- Web: 基于MVC工程模板搭建,系统模型,视图,控制器
- Service: 业务
- Repository: 持久化层,集成EntityFramework
- Tracking:日志组件集成Log4net
- CommonUtils:公共工具,提供加密解密/序列化/Excel处理,提供Castle Ioc管理
话不多说,直接上干货
集成Log4net
虽说李老板的芒果业务系统是如此的简单,可一向有着强迫症的小墨仍然有板有眼的规划系统的各个架构功能,做事尽善尽美是小墨的一贯作风。日志能省吗,当然不能!以下集成Log4net.
Nuget下载
这里直接右键解决方案Nuget中搜索Log4net,安装最新版5.2.7

日志配置文件
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs/Log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<staticLogFileName value="false" />
<datePattern value="_yyyy.MM.dd.'log'" />
<maxSizeRollBackups value="20" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DUBEG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
几点必要说明:
<file value="Logs/Log" /> 配置logs打印路径
<staticLogFileName value="false" /> 配置Log文件名非静态,因为小墨想每天生成一个Log文件
<datePattern value="_yyyy.MM.dd.'log'" /> 日志文件格式 Log_2020.03.20.log
Global.asax.cs里配置Log启动
public class LoggerFactory
{
public static void Config()
{
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
var filePath = Path.Combine(baseDir, "Config\\Log4net.config");
var fileInfo = new FileInfo(filePath);
log4net.Config.XmlConfigurator.Configure(fileInfo);
}
}
然后就可以优雅的使用日志啦!
//声明
ILog logger = log4net.LogManager.GetLogger(typeof(MvcApplication));
//使用
logger.Info("大青芒管理系统已启动.");
这里可以再将ILog包装下,支持参数化打印日志,可以在优化下。
集成AutoMapper
首先说明下整个系统的Model,Dto , Entity,根据业务需要定义比较简单,主要分为用户(代理表),订单表,所以就有
UserModel/UserInfo/UserEntity
OrderModel/OrdeDto/OrderEntity


这里不可避免的用到各个对象的互相转化,当然我们一定不会挨个字段赋值的,很弱,我们要用AutoMapper。这里我们优先介绍下AutoMapper,因为之后他广泛应用在我们之后的业务中。
Nuget引入AutoMapper

AutoMapper配置

这里因为,我的Dto与Entity都是简单类型,而且类型都是一致的,所以可以直接Map,但是一般在稍微复杂的业务中,Dto中经常会嵌套其他Dto,或者字段类型也是不匹配的,我们主要使用AutoMapper的两个方法去做转换,这里我不做举例了。
ForMember
ResolveUsing
Global.asax.cs系统启动时,启动Map配置。这里在Service层引入一个AutoMapperInit类,过渡一下调用Repository的Initialize方法,是为了不想再Service层引入AutoMapper包,所有Dto与Entity的转换在Repository里处理
AutoMapperInit.Init();
使用AutoMapper

感谢阅读!
另外,也欢迎大家关注我的二维码。更多的职场生活,开发与运维方向的技术精华定期发布,希望您在这有所收获。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布
ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net的更多相关文章
- ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework
在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分.这篇EF的构造,我将 ...
- 使用ASP.NET MVC 5快速实现芒果分销后台管理系统(前言)
### 前言 在前一篇文章中,我提到最近要陆续为大家写一些.Net实战技术文章.从今天起,我将围绕一个入门级现实的芒果分销管理系统案例,使用ASP.NET MVC 5,从前端到后端,一步一步为大家呈现 ...
- 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。
下载地址:http://download.csdn.net/download/wulang1988/10039402 最新版 INSPINIA IN+ - WebApp Admin Theme v2. ...
- asp.net EF+MVC+Bootstrap 通用后台管理系统
需要源码,请加QQ:858-048-581 开发环境: VS2012或以上 数据库: SQL Server 2008R2或以上 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析
1.任务主界面.任务可以被挂起,启动,和删除.来自著名Quartz扩展 2.任务可以是执行的SQL命令,存储过程,或者是一个后台方法 3.极其复杂的调度任务,循环次数,可以自行设置.并可以间隔执行,比 ...
- 后台管理系统之系统运行日志开发(Java实现)
一,实现运行日志记录在文件中,并实现日志分包记录,项目出问题后方便定位分析.效果如图: 二,代码实现(springboot项目) 只需要在resources目录下新建:logback-spring.x ...
- 后台管理系统之系统操作日志开发(Java实现)
一,功能点 实现管理员操作数据的记录.效果如下 二,代码实现 基于注解的Aop日志记录 1.Log实体类 package com.ideal.manage.guest.bean.log; import ...
- ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用
文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
随机推荐
- ionic3 生命周期钩子
ionViewDidLoad 页面加载完成触发,这里的"加载完成"指的是页面所需的资源已经加载完成,但还没进入这个页面的状态(用户看到的还是上一个页面). 需要注意的是它是一个很傲 ...
- windows下的tfjs-node安装异常总结
大约有半年没有写博客了,奔波于上海这座魔都之中.险些忘了自己是个有梦想的全栈工程师 书接上回,由于个人非常厌恶python的语法,半年前发现了tensorflow.js这个宝贝(下简称tfjs),喜出 ...
- mysql获取按日期排序获取最新的记录
今天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况 这种需求,我想很多人都遇到过.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from ...
- ssm框架下怎么批量删除数据?
ssm框架下批量删除怎么删除? 1.单击删除按钮选中选项后,跳转到js函数,由函数处理 2. 主要就是前端的操作 js 操作(如何全选?如何把选中的数据传到Controller中) 3.fun()函数 ...
- android-interview
如何减小安装包的大小 主要是减小资源的大小 不常使用的资源,使用时再从网络下载. 绘制代替图片资源 OOM (Out Of Memory) https://www.zhihu.com/question ...
- ypoj 2286 佳佳买菜
题目名称:佳佳买菜 描述 佳佳是我们的ACM社团的副社长,她感觉得自己没存在感,so-由于实验室要聚餐了,佳佳决定买点菜,来做菜给大家吃.佳佳喜欢吃娃娃菜,于是她来到买菜的地方.佳佳:我要10斤娃娃菜 ...
- Simplifying Conditional Expressions(简化条件表达式)
1.Decompose Conditional(分解条件表达式) 2.Consolidate Conditional Expressions(合并条件表达式) 3.Consolidate Duplic ...
- java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer information does not match signer information of other classes in the same package
最近在写个Http协议的压测挡板时,遇到以下错误. 2018-03-08 10:34:07.808:INFO:oejs.Server:jetty-8.1.9.v20130131 2018-03-08 ...
- Spring Boot 2.x基础教程:使用MyBatis访问MySQL
之前我们已经介绍了两种在Spring Boot中访问关系型数据库的方式: 使用spring-boot-starter-jdbc 使用spring-boot-starter-data-jpa 虽然Spr ...
- 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔
老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...