色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

走向ASP.NET架構(gòu)設(shè)計(jì)——第四章:業(yè)務(wù)層分層架構(gòu)(前篇)

  在討論完四種模式之后,我將會(huì)和大家一起來(lái)看看DDD的一些知識(shí)。每種模式的講解,我都會(huì)用實(shí)例的形式給出完整的代碼,也希望大家多琢磨!

  不是所有的應(yīng)用程序都是一樣的,也不是所有的系統(tǒng)都需要用復(fù)雜的架構(gòu)來(lái)組織業(yè)務(wù)邏輯。作為開(kāi)發(fā)人員,我們必須清楚每一種業(yè)務(wù)邏輯組織的模式,這樣我們才能在需要的時(shí)候做出合適的選擇。

  Transaction Script

  這種組織業(yè)務(wù)邏輯的模式是最簡(jiǎn)單,也是最容易理解的。Transaction Script模式就是用面向過(guò)程的方式來(lái)組織業(yè)務(wù)邏輯的。通常情況下,系統(tǒng)的一個(gè)流程就被實(shí)現(xiàn)為一個(gè)方法,然后把所有的這些方法組織在一起,放在一個(gè)靜態(tài)的manager類(lèi)或者service 類(lèi)中。實(shí)現(xiàn)流程的那個(gè)方法包含了業(yè)務(wù)邏輯的Check和Validation,數(shù)據(jù)的持久化以及其他的一些相關(guān)操作。也就是說(shuō),一個(gè)方法把所有的事情都做完了。當(dāng)然,有時(shí)候這個(gè)大的方法還可能被拆成小的方法,便于重用。如下圖所示:

  Transaction Script一個(gè)好處就是理解起來(lái)很簡(jiǎn)單,尤其是當(dāng)Team中的一個(gè)新成員來(lái)說(shuō),更是如此,因?yàn)樗麕缀醪挥没ㄊ裁磿r(shí)間,就能立刻明白這種組織業(yè)務(wù)邏輯的方式。每當(dāng)來(lái)了一個(gè)新的需求的時(shí)候,要做的事情就是去加上一個(gè)或者一些新的方法來(lái)是實(shí)現(xiàn)這個(gè)需求,而其還不會(huì)影響其他已經(jīng)存在的功能。

  對(duì)于一個(gè)很小的或者基本山?jīng)]什么業(yè)務(wù)邏輯的系統(tǒng)來(lái)說(shuō),用Transaction Script模式組織業(yè)務(wù)邏輯還是很不錯(cuò)的,而且對(duì)一個(gè)剛剛踏入IT的開(kāi)發(fā)人員門(mén)檻也比較低。:當(dāng)系統(tǒng)開(kāi)始變大,業(yè)務(wù)邏輯開(kāi)始變得復(fù)雜的時(shí)候Transaction Script的問(wèn)題的出來(lái)了。最后的結(jié)果可能就是系統(tǒng)中存在大量的方法,而且這些方法中到處都是重復(fù)的代碼。有的時(shí)候,我們可以提煉出一些業(yè)務(wù)邏輯的驗(yàn)證代碼組織為方法,但是我們?nèi)ズ茈y提煉出一些在流程上相識(shí)的代碼,即使兩個(gè)流程只有一點(diǎn)點(diǎn)的不同。如果系統(tǒng)的需求稍微一邊,導(dǎo)致流程變了一點(diǎn)點(diǎn),那么很多的方法就要改動(dòng),而且我們還得在系統(tǒng)中去找出那些相似的流程代碼,然后修改,萬(wàn)一哪個(gè)方法沒(méi)有找出,后果可想而知。

  下面我們就用一個(gè)人事請(qǐng)假管理系統(tǒng)為例子來(lái)看看Transaction Script是如何實(shí)現(xiàn)的。因?yàn)門(mén)ransaction Script很簡(jiǎn)單,所以下面的代碼也只是用于演示,大家理解就行了。

public class HolidayService
{
public static bool BookHolidayFor(int employeeId, DateTime From, DateTime To)
{
bool booked = false;
TimeSpan numberOfDaysRequestedForHoliday
= To - From;
if (numberOfDaysRequestedForHoliday.Days > 0)
{
if (RequestHolidayDoesNotClashWithExistingHoliday(employeeId, From, To))
{
int holidayAvailable = GetHolidayRemainingFor(employeeId);
if (holidayAvailable >= numberOfDaysRequestedForHoliday.Days)
{
SubmitHolidayBookingFor(employeeId, From, To);
booked
= true;
}
}
}
return booked;
}

private static int GetHolidayRemainingFor(int employeeId)
{
// ...
}

public static List<EmployeeDTO> GetAllEmployeesOnLeaveBetween(
DateTime From, DateTime To)
{
// ...
}

public static List<EmployeeDTO> GetAllEmployeesWithHolidayRemaining()
{
// ...
}
}

NET技術(shù)走向ASP.NET架構(gòu)設(shè)計(jì)——第四章:業(yè)務(wù)層分層架構(gòu)(前篇),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 锡林浩特市| 广南县| 九寨沟县| 辛集市| 泌阳县| 大田县| 尤溪县| 阜南县| 华池县| 奎屯市| 平邑县| 米泉市| 张家港市| 东宁县| 河源市| 武乡县| 固始县| 读书| 肇东市| 黔南| 齐齐哈尔市| 德州市| 偃师市| 江阴市| 陈巴尔虎旗| 壤塘县| 玉溪市| 海南省| 江西省| 吴忠市| 博客| 雷山县| 佛冈县| 三都| 团风县| 安康市| 和林格尔县| 娄烦县| 乌兰察布市| 蛟河市| 汨罗市|