ASP.NET MVC5實現芒果分銷後臺管理系統(一):系統結構設計,集成AutoMapper,Log4net

来源:https://www.cnblogs.com/dalianmaodada/archive/2020/03/21/12536429.html
-Advertisement-
Play Games

在構思完系統思維腦圖後,小墨回到家中,便摩拳擦掌開始了開發工作。要想迅速完成系統開發,前期系統設計和準備尤其重要,因為小墨做過太多大大小小的業務系統,準備工作也是十分順利。 系統結構 整個系統工程結構如上,基於傳統的三層架構模式(不太懂的快去惡補一下) Web: 基於MVC工程模板搭建,系統模型,視 ...


在構思完系統思維腦圖後,小墨回到家中,便摩拳擦掌開始了開發工作。要想迅速完成系統開發,前期系統設計和準備尤其重要,因為小墨做過太多大大小小的業務系統,準備工作也是十分順利。

系統結構

file

整個系統工程結構如上,基於傳統的三層架構模式(不太懂的快去惡補一下)

  • Web: 基於MVC工程模板搭建,系統模型,視圖,控制器
  • Service: 業務
  • Repository: 持久化層,集成EntityFramework
  • Tracking:日誌組件集成Log4net
  • CommonUtils:公共工具,提供加密解密/序列化/Excel處理,提供Castle Ioc管理

話不多說,直接上乾貨

集成Log4net

雖說李老闆的芒果業務系統是如此的簡單,可一向有著強迫症的小墨仍然有板有眼的規劃系統的各個架構功能,做事盡善盡美是小墨的一貫作風。日誌能省嗎,當然不能!以下集成Log4net.

Nuget下載

這裡直接右鍵解決方案Nuget中搜索Log4net,安裝最新版5.2.7

file

日誌配置文件

            <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
file

file

這裡不可避免的用到各個對象的互相轉化,當然我們一定不會挨個欄位賦值的,很弱,這裡我們使用用AutoMapper,因為之後他廣泛應用在我們之後的業務中。

Nuget引入AutoMapper

file

AutoMapper配置

file

這裡因為,我的Dto與Entity都是簡單類型,而且類型都是一致的,所以可以直接Map,但是一般在稍微複雜的業務中,Dto中經常會嵌套其他Dto,或者欄位類型也是不匹配的,我們主要使用AutoMapper的以下兩個方法去做轉換,這裡我不做舉例了。

ForMember
ResolveUsing
    

Global.asax.cs系統啟動時,啟動Map配置。這裡在Service層引入一個AutoMapperInit類,過渡一下調用Repository的Initialize方法,是為了不想再Service層引入AutoMapper包,所有Dto與Entity的轉換在Repository里處理

    AutoMapperInit.Init();
    

使用AutoMapper
file

感謝閱讀!

file

本文由博客群發一文多發等運營工具平臺 OpenWrite 發佈


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring 整合 Mybatis 在開始使用 MyBatis Spring 之前,需要先熟悉 Spring 和 MyBatis 這兩個框架和有關它們的術語。 MyBatis Spring 需要以下版本: | MyBatis Spring | MyBatis | Spring 框架 | Spring ...
  • Startup構造函數 ConfigureServices方法 Configure方法 在ConfigureWebHostDefaults中直接配置服務和請求管道 ASP.NET Core一般使用Startup類來進行應用的配置。在構建應用主機時指定Startup類,通常通過在主機生成器上調用Web ...
  • 前言 為什麼在開發中,介面文檔越來越成為前後端開發人員溝通的樞紐呢? 隨著業務的發張,項目越來越多,而對於支撐整個項目架構體系而言,我們對系統業務的水平拆分,垂直分層,讓業務系統更加清晰,從而產生一系統平臺和系統,並使用介面進行數據交互。因此可見,業務的不斷發展,介面不斷增多,很多介面各自寄宿在不同 ...
  • 記錄更改控制項外觀學習 更改控制項外觀有三種方法:屬性、Style、ControlTemplate。 Style:可以一次對多個控制項設置屬性。 ContentTemplate: 自定義Control外觀,利用行為更改外觀。 屬性:<Window x:Class="WpfApp1.MainWindow" ...
  • 一、引言 面向介面(抽象)編程,是為了降低程式的耦合度,符合依賴倒置原則。因此典型的三層架構UI、BLL、DAL基於介面設計後,會拓展成UI、IBLL、BLL、IDAL、DAL。在上一篇《C# IoC學習筆記》中我們可以瞭解到,控制反轉(IoC)使對象的創建交給了第三方IoC容器如Unity。利用U ...
  • 面向對象: 面向對象方法是軟體工程、程式設計的主要方向,也是最有效、最實用和最流行的軟體開發方法之一。 C#是完全面想對象(OOP)的程式設計語言,具有面向對象程式設計方法的所有特性。 面向對象方法的基本思想就是從所要解決的問題本身出發,儘可能運用自然的思維方式(分析、抽象、分類、繼承),以現實世界 ...
  • C# Net 使用 openxml 寫入 對象 到 Excel 中 C# Net 使用openxml寫入對象到Excel中 文尾看效果 效果一(模板文件寫入集合對象) 效果二(新建文件寫入集合對象) 加入包:OpenXml 創建文件:ExcelWrite.cs 複製下麵全部代碼到文件 ExcelWr ...
  • 1、下載插件fiddler 獲取代碼,方式:https:////www.cnblogs.com/my2020/p/12458110.html 將左側拖入右側,點擊“Run Code”運行查看是否可行 2、打開VS,新建操作台程式 3、將fiddler中的代碼粘貼進行修改調試 4、進入“屬性”將“控制 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...