OOM(物件與物件對映)場景設計和實現原理

2021-09-22 07:37:54 字數 2022 閱讀 1838

在前文有一篇隨筆,寫了關於《ui與實體的對映》,有朋友建議寫一下實現原理。今天我就整理一下,將oo對映的使用場景設計和實現原理描述一下。原來的實現比較拙劣,如果要發布成產品的話,還需要重構很多地方,以提高元件api的易用性和擴充套件性。注:該元件是2023年基於dotnet 1.1實現的,因此沒有泛型和其它現在比較時尚的功能。

1 oo對映使用場景設計

oo對映提出的目的是為了解決將ui物件轉換成乙個orm中的實體,然後可以利用orm直接將其持久化,避免一堆的幅值邏輯。先看一下對映類的定義,然後將定義不同的對映場景。所有的對映定義都是在實體類oo對映預定義的對映方式有member與member對映,control與member對映,reference對映。同時,也支援自定義擴充套件。該元件只是乙個個人用的,耗時4天完成,因此現有功能非常有限。

1.1 member對映場景

(1)ui物件與實體物件public相同字段直接對映

[member]

public int age;

這個在實體類的對映定義指明了如下資訊:1)ui類有乙個age欄位;2)ui類的age欄位與實體類age欄位對映。

(2)ui物件欄位的屬性與實體直接對映

[member("ageobject.myage")]

public int age;

該對映定義了實體類的age將與ui類的ageobject物件的myage欄位/屬性對映。屬性可以串成乙個路徑方式,比如objecta.propa1.propa11.propa111。

(3)ui物件與實體物件public相同字段直接對映

[member]

public bool ***

定義實體類的***屬性與ui的***字段/屬性對映。

(4)ui物件欄位的屬性與實體直接對映

[member("***object.my***")]

public bool ***

定義實體類***屬性與ui類的***object類例項成員的***成員對映。

1.2 控制項對映場景

ui類中控制項與member定義方式是一模一樣的,只不過控制項是乙個比較特殊的member。在oo對映元件裡,每乙個控制項都有預設屬性,在配置檔案中定義。

以下是預設的定義。

以下說明控制項對映的場景。

(1)控制項預設屬性與成員對映

[control]

public string name

定義了ui類的name控制項的預設屬性與實體類name屬性對映。如果name控制項是乙個textbox,那麼其預設屬性是text。

(2)控制項指定屬性路徑與成員對映

[control("name.text")]

public string name

實現ui類的name控制項的text屬性與實體類name對映。

1.3 引用對映

引用對映定義乙個實體類如果包含另乙個實體類,他們都可以直接實現對映。

[reference(typeof(employeeentity))]

public employeeentity employee

該場景定義了實體類中的employee也是乙個支援oo對映的實體。當執行對映時,employee成員也必須實現對映幅值。

1.4 全域性對映定義

全域性對映用於指定乙個實體類的對映是否為單件模式、ui類與實體類成員命名前字尾差異。它的特性定義是應用於實體類,而不是成員。

///

/// 全域性對映定義。

///

[map(deploymode.singlecall, "", "")]

public class userentity

1.5 擴充套件場景

其它場景我原來沒有實現,不過可以進行自定義擴充套件,比如方法與成員對映,動態更改對映屬性等。

2 實現原理

oo對映元件的實現比較簡單,核心類實現如下:

其實現如下:

物件設計與程式設計

面向過程的程式設計 編寫乙個方法,void drivecar 物件導向的程式設計 將一輛汽車看成乙個物件,將所有汽車物件 的共性抽取出來,設計乙個類 car,類中有乙個 方法void drive 用car 這個類例項化乙個具體 的物件car 呼叫 car.drive n從程式設計的角度看,類是物件導...

php 物件和設計

1 設計 1 設計 通俗理解為,類和物件的定義與配置 實現特定功能類,其他物件組成的類,管理其他物件的類,簡單用的其他物件的類 2 物件導向和面向過程的乙個核心區別是如何分配職責,面向過程 一系列命令和方法的連續呼叫,控制 根據不同的條件執行不同的職責,一種自頂而下的執行方式 物件導向 將職責從客戶...

實現物件集合與DataTable的對映

最近在研究asp.net mvc,跟我的專案經理 以後,他更偏向於使用ado.net而不是orm,所以自己想做乙個model與datatable的對映程式,以便以後使用mvc使用到,自己才疏學淺,如果有更好的方法,希望博友們可以指出。實現對映的前提條件是datatable裡的列名要和自己物件中的屬性...