首页 > 其他分享 >架构之反射实现源代码(不知道要干什么确需要知道能干什么)

架构之反射实现源代码(不知道要干什么确需要知道能干什么)

时间:2022-11-18 19:00:48浏览次数:51  
标签:null return string using 干什么 IDefaultCalc iDefaultCalc 架构 源代码


做过架构的朋友或许都有过不知道开发人员要干什么确需要知道开发人员能干什么的困惑,估计大家的解决思路应该也会往一处想-反射

介绍下自己的实现思路和代码:

1、定义接口

如:   

    /// <summary>
    /// 定义了列配置默认值的C#计算规则接口
    /// by 贾世义 2009-1-15
    /// </summary>
    public interface IDefaultCalc
    {
        /// <summary>
        /// 配置的参数值字符串
        /// </summary>
        string Parameter { get; set; }
        /// <summary>
        /// 当前用户的账号
        /// </summary>
        string UserAccount { get; set; }
        /// <summary>
        /// 计算方法 返回的值作为默认值
        /// </summary>
        /// <returns></returns>
        object GetValue();
    }

2、反射接口

/// <summary>
/// 反射判断类是否实现IDefaultCalc
/// </summary>
/// <param name="iDefaultCalc"></param>
/// <returns>错误 null时正确</returns>
public static string IsDefaultCalc(string iDefaultCalc)
{
if (String.IsNullOrEmpty(iDefaultCalc))
{
return "类名称不能为空,需要为实现了IDefaultCalc接口的类名";
}
try
{
int p = iDefaultCalc.LastIndexOf(".");
if (p > 0)
{
Assembly calcAssembly = Assembly.Load(iDefaultCalc.Substring(0, p));
object calcObj = calcAssembly.CreateInstance(iDefaultCalc, true);
if (calcObj == null)
{
return "类反射错误:" + iDefaultCalc + "不存在";
}
else if (calcObj is IDefaultCalc)
{
return null;
}
else
{
return iDefaultCalc + "类未实现IDefaultCalc接口";
}
}
else
{
return iDefaultCalc + "类必须有命名空间";
}
}
catch (Exception ex)
{
return iDefaultCalc + "类反射错误:" + ex.Message;
}
}

3、提供配置实现类的入口

在xml中定义默认值字符串,如:MyQuery.BAL.QueryDefault

4、使用者需要继承接口实现类

如:

using System;
using System.Collections.Generic;
using System.Text;
using MyQuery.MyControl;
using MyQuery.DAL;
using MyQuery.Utils;
using System.Web;

namespace PASA.BAL
{
    /// <summary>
    /// 针对查询模板Foot的列计算接口的实现
    /// by 贾世义 2009-1-28
    /// </summary>
    public class QueryDefault : IDefaultCalc
    {
        #region IDefaultCalc Members
        private string _parameter = null;
        /// <summary>
        /// 配置的参数值字符串
        /// </summary>
        public string Parameter
        {
            get
            {
                return _parameter;
            }
            set
            {
                _parameter = value;
            }
        }
        private string _userAccount = null;
        /// <summary>
        /// 当前用户的账号
        /// </summary>
        public string UserAccount
        {
            get
            {
                return _userAccount;
            }
            set
            {
                _userAccount = value;
            }
        }
        #endregion

        /// <summary>
        /// 返回有Parameter计算的来的值
        /// 注意当else if多于10个时建议再仿照此类另建一个实现类,配置中配成新实现的类名即可
        /// </summary>
        /// <returns></returns>
        public object GetValue()
        {
            if (String.IsNullOrEmpty(Parameter))
            {
                return null;
            }
            #region 自定义处理
            else if ("getdate".Equals(Parameter, StringComparison.CurrentCultureIgnoreCase))
            {
                return DateTime.Today.ToString();
            }
            #endregion
            else
            {
                return null;
            }
        }

    }
}

欢迎访问:​​http://121.18.78.216​​ 适易查询分析、工作流、内容管理及项目管理演示平台

 

标签:null,return,string,using,干什么,IDefaultCalc,iDefaultCalc,架构,源代码
From: https://blog.51cto.com/u_14751752/5868983

相关文章

  • 第二章 Kubernetes架构原则和对象设计
    Kubernetes架构 根据如上架构对各组件进行讲解etcdetcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布......
  • 直播系统源代码,jquery实现百分比长度条
    直播系统源代码,jquery实现百分比长度条代码: jQuery部分  $("#provinceTop10List").click(function(){        PainmingTable(obj.provinceTop10......
  • MyQuery 快速开发平台-配置实现开发架构
    建立一个基础的系统开发架构,利用XML配置(结构化的xml文档配置相关的信息)实现增删改查列表及业务流程,支持开发人员方便的开发实现客户需求,支持系统实施维护人员对配置实现进行......
  • 上帝视角看Vue源码整体架构+相关源码问答
    前言这段时间利用课余时间夹杂了很多很多事把Vue2源码学习了一遍,但很多都是跟着视频大概过了一遍,也都画了自己的思维导图。但还是对详情的感念模糊不清,故这段时间对源码......
  • 04.从架构层面看设计模式(2)
                                     ......
  • Apache Flink架构及其工作原理
    ApacheFlink架构及其工作原理1、定义:Apacheflink是一个实时计算框架和分布式处理引擎,用于再无边界和有边界数据流上进行有状态的计算,Flink能在所有的集群环境中运行,......
  • 【MySQL】MySQL复制与高可用水平扩展架构实战
    本文导读本文简单介绍几种复制方式复制在生产中解决的实际问题,MySQL复制的配置流程和MySQL复制类型,不会深入到 MTBF、MTTR平均故障间隔、平均修复时间等等以及MMM集群架构......
  • 03.从架构层面看设计模式(1)
                                工厂模式底层就是if判断然后创建不同的产品           ......
  • 2022年11月系统架构设计师考试知识点分布
    2022年11月系统架构设计师考试知识点分布薛大龙 邹月平施游 1、上午知识点分布表1是按题号对应的考试内容。表1按试题号分布的考查内容试题号知识点试题号知识点1云计......
  • MySQL集群架构扩容方案
    一.扩容场景描述当系统用户进入了高速增长期时,即便是对数据进行分库分表,但数据库的容量,还有表的数据量也总会达到天花板。当现有数据库达到承受极限时,就需要增加新服务器......