• NLayerAppV3--基础结构层(Cross-Cutting部分)


    回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目。

    NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的;它包含了开发人员和架构师都可以重用的DDD层。

    Github地址:https://github.com/cesarcastrocuba/nlayerappv3

    NLayerAppV3的基础结构层一共分为两个部分。处理数据相关的基础组件和Cross-Cutting的基础组件。

    处理数据相关的基础组件主要包含UOW和仓储的实现;

    Cross-Cutting的基础组件目前主要包含数据适配器、国际化、验证;

    本节我们主要介绍Cross-Cutting的基础组件。

    这部分相关的项目主要有两个Infrastructure.Crosscutting和Infrastructure.Crosscutting.NetFramework。

    Infrastructure.Crosscutting封装了数据适配器、国际化、验证相关的接口;

    Infrastructure.Crosscutting.NetFramework包含了Infrastructure.Crosscutting中相关契约的实现;

    1、Infrastructure.Crosscutting

    --Adapter数据适配器

    这部分是数据适配或者数据转换的功能契约。

    数据转换是什么?为什么要数据转换?

    DTO:数据转换对象。

    数据转换主要是用于将用户的输入转换为DTO,在持久化的时候又将DTO转为领域模型进行持久化;如果是用户请求数据的话,则是相反的过程。

    首先定义了一个类型转换的契约ITypeAdapter。

    接口中定义了类型转换的方法,给我一个TSource,我还你一个TTarget。

    TTarget Adapt<TSource, TTarget>(TSource source)
                where TTarget : class, new()
                where TSource : class;
    

    ITypeAdapterFactory是适配器的工厂契约

    ITypeAdapter Create(); 

    创建适配器,返回适配器的契约。

    TypeAdapterFactory是适配器工厂。

    静态类,有两个方法,设置当前工厂和创建适配器的方法。

    static ITypeAdapterFactory _currentTypeAdapterFactory = null;
    
            #endregion
    
            #region Public Static Methods
    
            /// <summary>
            /// Set the current type adapter factory
            /// </summary>
            /// <param name="adapterFactory">The adapter factory to set</param>
            public static void SetCurrent(ITypeAdapterFactory adapterFactory)
            {
                _currentTypeAdapterFactory = adapterFactory;
            }
            /// <summary>
            /// Create a new type adapter from currect factory
            /// </summary>
            /// <returns>Created type adapter</returns>
            public static ITypeAdapter CreateAdapter()
            {
                return _currentTypeAdapterFactory.Create();
            }
    View Code

    --Localization 国际化

    结构跟Adapter类似。

    ILocalization定义了国际化的契约。

    public interface ILocalization
        {
            string GetStringResource(string key);
            string GetStringResource(string key, CultureInfo culture);
            string GetStringResource<T>(T key) where T : struct, IConvertible;
            string GetStringResource<T>(T key, CultureInfo culture) where T : struct, IConvertible;
        }
    View Code

    GetStringResource:根据key和CultureInfo获取value。

    ILocalizationFactory是创建国际化的工厂。

    LocalizationFactory是国际化的工厂。

    有两个方法,创建当前国际化的工厂SetCurrent和创建当前资源的CreateLocalResources。

    LocalizationKeys定义了资源的枚举。

    --Validator 验证

    结构跟Adapter类似。

    IEntityValidator实体验证的契约。

    包含两个方法:是否验证IsValid和获取验证信息集GetInvalidMessages。

    /// <summary>
            /// Perform validation and return if the entity state is valid
            /// </summary>
            /// <typeparam name="TEntity">The type of entity to validate</typeparam>
            /// <param name="item">The instance to validate</param>
            /// <returns>True if entity state is valid</returns>
            bool IsValid<TEntity>(TEntity item)
                where TEntity : class;
    
            /// <summary>
            /// Return the collection of errors if entity state is not valid
            /// </summary>
            /// <typeparam name="TEntity">The type of entity</typeparam>
            /// <param name="item">The instance with validation errors</param>
            /// <returns>A collection of validation errors</returns>
            IEnumerable<String> GetInvalidMessages<TEntity>(TEntity item)
                where TEntity : class;
    View Code

    IEntityValidatorFactory是实体验证工厂的契约。

    定义了一个创建方法。

    EntityValidatorFactory是实体验证工厂。

    有两个方法,一个是设置当前工厂SetCurrent,另一个是创建验证器CreateValidator。

    static IEntityValidatorFactory _factory = null;
    
            #endregion
    
            #region Public Methods
    
            /// <summary>
            /// Set the  log factory to use
            /// </summary>
            /// <param name="factory">Log factory to use</param>
            public static void SetCurrent(IEntityValidatorFactory factory)
            {
                _factory = factory;
            }
    
            /// <summary>
            /// Create the validator factory
            /// </summary>
            /// <returns></returns>
            public static IEntityValidator CreateValidator()
            {
                return (_factory != null) ? _factory.Create() : null;
            }
    View Code

    2、Infrastructure.Crosscutting.NetFramework

    --Adapter 数据适配器

    使用AutoMapper库实现了类型转换适配器。

    AutomapperTypeAdapter实现了ITypeAdapter,完成了源目标数据类型到时目标数据类型的转换工作。

    AutomapperTypeAdapterFactory实现了ITypeAdapterFactory。

    在构造函数里使用反射的方式,加载Application层中的Profiler文件,实现类型转换的配置。

    Create方法返回AutomapperTypeAdapter对象。

    --Localization 国际化

    ResourcesManager实现了ILocalization,完成了从资源文件读取信息实现国际化。

    ResourcesManagerFactory实现了ILocalizationFactory。

    Create方法返回了ResourcesManager对象。

    Resources文件夹下放的是资源文件。

    --Validator 验证

    DataAnnotationsEntityValidator实现了IEntityValidator。

    使用System.ComponentModel.DataAnnotations验证实体的正确性。

    DataAnnotationsEntityValidatorFactory实现了IEntityValidatorFactory。

    Create方法返回了DataAnnotationsEntityValidator对象。

    总结:NLayerAppV3项目的Infrastructure(基础设施层)CrossCutting部分目前有三部分内容:适配器、国际化、验证。

    定义了适配器、国际化、验证的契约以及它们的工厂;

    实现了AutoMapper类型适配器、、国际化资源的获取、System.ComponentModel.DataAnnotations方式的实体验证。

    参考:dax.net文章 https://www.cnblogs.com/daxnet/archive/2011/06/01/2067134.html

      

  • 相关阅读:
    记中兴软件园一个月实训(四)
    MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
    MMORPG大型游戏设计与开发(服务器 AI 事件)
    MMORPG大型游戏设计与开发(服务器 AI 控制器)
    MMORPG大型游戏设计与开发(服务器 AI 基础接口)
    MMORPG大型游戏设计与开发(服务器 AI 概述)
    MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
    MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)
    MMORPG大型游戏设计与开发(服务器 游戏场景 搜索机)
    MMORPG大型游戏设计与开发(服务器 游戏场景 聊天管道和寻路器)
  • 原文地址:https://www.cnblogs.com/net-yuan/p/NLayerAppV3-Infrastructure_CrossCutting.html
Copyright © 2020-2023  润新知