zoukankan      html  css  js  c++  java
  • 对象属性解释、对象属性查询

     

    三层架构、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则,对象属性查询器实现起来就很简单了。

     

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

     

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

     

  • 相关阅读:
    37 什么时候使用内部临时表
    2 Hadoop集群安装部署准备
    36 为什么临时表可以重名
    maven内置属性
    ProGuard 最全混淆规则说明
    stylus的用法
    vscode 插件 配置
    关于overflow:hidden
    vue-devtools/安装vue-devtools
    对Java中使用两个大括号进行初始化的理解
  • 原文地址:https://www.cnblogs.com/rock_chen/p/1719897.html
Copyright © 2011-2022 走看看