• 对象属性解释、对象属性查询


     

    三层架构、MVC、领域设计等等要解决的问题就是各行其道,业务做业务的事情,显示做显示的事情,这个大家都能理解。他们之间的该如何协助每个人的理解都不一样,这里我提供一种方法,供大家参考。

    我们知道,领取驱动设计提供了一种分类方法,使得我们有效的区分不同对象,其中部分值对象或引用对象给用户提供用于展现,仓储或服务为用户提供业务支撑。编程人员依据对象编写界面。这个过程没有问题,问题出现在细节上。

    三个对象

    字段

     

    Employee(员工)

     

     

     

    EmployeeId

     

     

    DepartId

     

     

    EmployeeName

     

    Depart(部门)

    DepartId

     

     

    DepartName

     

    Salary(工资)

     

     

     

    EmployeeId

     

     

    TypeName

    JBGZ(基本工资)

    GWGZ(岗位工资)

     

    Money

     

     

    对象属性解释

    以MVC为例,一般情况下编程时我们在界面中都是通过硬编码在View中绑定信息,例如Employee.EmployeeName,Employee.Depart.DepartName,对工资的取值需要一个循环。提交后在Controll中获取值,然后又解析、赋值,比如:将界面的选择的”开发部”从数据库中检索一下,然后取出Id赋值到Employee.DepartId上。就这样相同功能的不同实现代码开始蔓延。

    这里的所谓的对象属性解释器就是通过弱引用的关系实现动态取值,因为这样取值的方式是可以抽象并枚举出来。

         interface IPropertyInterpreter

            {

            object GetPropertyValue(string propertyName);

            void SetPropertyValue(string propertyName,object value);

            }

    在取值是我们可以用诸如这样的方式

       employeePropertyInterpreter.GetPropertyValue("EmployeeName");

       employeePropertyInterpreter.GetPropertyValue("Department.DepartmentId");

       employeePropertyInterpreter.GetPropertyValue("Salary.JBGZ");

       employeePropertyInterpreter.GetPropertyValue("Salary.GWGZ");

     

    Employee和Salary是一对多关系,但通过Salary.JBGZ(最终解释为Salary.JBGZ.Money)可以直接访问和赋值,这样的写法更能表达出真实的语意。

     

    employeePropertyInterpreter.SetPropertyValue("Department.DepartmentName", "开发部");

    表达为:将当前员工的部门设置为开发部(前提“开发部”唯一)

     

    对象属性查询

       public interface IQuery

        {

            List<T> GetQuery<T>(string query);

        }

    提供属性表达式查询

    employeeQuery.GetQuery<Employee>("EmployeeName='张' and Department.DepartmentName=开发部");

     

    只要实现了对象属性解释器对象属性查询器,就可以大大减轻View层的代码编写负担,也为动态实现界面编程提供了可能。同时这种实现可以在不影响现有程序结构的情况下将此功能加上。如果基于Linq To SQL,EF则,对象属性查询器实现起来就很简单了。

     

    但是此种写法全部是弱引用,属性变化时引发的错误只能是运行时才能发现。

     

    备注:以上接口仅为描述用,具体写法可以根据实际情况决定。

     

  • 相关阅读:
    STM32F407 窗口看门狗 个人笔记
    Hadoop技巧系列索引
    从零自学Hadoop系列索引
    从零自学Hadoop(25):Impala相关操作下
    从零自学Hadoop(24):Impala相关操作上
    从零自学Hadoop(23):Impala介绍及安装
    Hadoop技巧(04):简易处理solr date 时区问题
    从零自学Hadoop(22):HBase协处理器
    从零自学Hadoop(21):HBase数据模型相关操作下
    从零自学Hadoop(20):HBase数据模型相关操作上
  • 原文地址:https://www.cnblogs.com/rock_chen/p/1719897.html
Copyright © 2020-2023  润新知