在網(wǎng)上看到很多關(guān)于設(shè)計(jì)模式的文章。但是基本都是單獨(dú)講解某一個(gè)設(shè)計(jì)模式的應(yīng)用場(chǎng)景和設(shè)計(jì)思路。可是真實(shí)的項(xiàng)目中,可能僅僅只按照書上的某種設(shè)計(jì)模式就能寫出優(yōu)雅的代碼嗎?我覺(jué)得是不可能的。我這篇文章希望跟大家分享的是我思考的過(guò)程,而非結(jié)果。首先,應(yīng)該對(duì)書上的20多種的設(shè)計(jì)模式有了解,大概清楚它們都是怎么樣一個(gè)設(shè)計(jì)思路。建議有想學(xué)習(xí)設(shè)計(jì)模式的Friends還是買本紙質(zhì)書系統(tǒng)的學(xué)習(xí)。下面,我給出一個(gè)真實(shí)的項(xiàng)目來(lái)引出我對(duì)這個(gè)項(xiàng)目的思考。第一次寫博客分享我的思路,在加上我的思維有些女性思維,是跳躍性的。可能有些表達(dá)不是很清楚。望大家見(jiàn)諒。

/// <summary> /// 處理流程基類 /// </summary> public abstract class PRocessFlowBase : iprocessFlow { protected ProcessFlowBase(ProcessFlowBase processFlowWhenRight = default(ProcessFlowBase), ProcessFlowBase processFlowWhenWrong = default(ProcessFlowBase)) { this.NextProcessFlowWhenRight = processFlowWhenRight; this.NextProcessFlowWhenWrong = processFlowWhenWrong; this.IsRight = true; this.IsEnd = false; } protected IDbConnection DbConnection { get; set; } protected IDbCommand DbCommand { get; set; } protected IDbTransaction DbTransaction { private get; set; } /// <summary> /// 當(dāng)前流程是否處理通過(guò) /// </summary> private bool IsRight { get; set; } /// <summary> /// 流程是否結(jié)束 /// </summary> private bool IsEnd { get; set; } /// <summary> /// 下一個(gè)流程,當(dāng)流程處理操作通過(guò)的時(shí)候 /// </summary> private ProcessFlowBase NextProcessFlowWhenRight { set; get; } /// <summary> /// 下一個(gè)流程,當(dāng)流程處理操作不通過(guò)的時(shí)候 /// </summary> private ProcessFlowBase NextProcessFlowWhenWrong { get; set; } /// <summary> /// 處理 /// </summary> /// <param name="dataContext"></param> public void Process(DataContext dataContext) { this.ProcessTemplate(dataContext); this.RecordLog(dataContext); if (this.IsEnd) return; if (this.IsRight) { if (this.NextProcessFlowWhenRight == default(ProcessFlowBase)) return; this.NextProcessFlowWhenRight.SetParameters(this.DbConnection, this.DbCommand, this.DbTransaction); this.NextProcessFlowWhenRight.Process(dataContext); } else { if (this.NextProcessFlowWhenWrong == default(ProcessFlowBase)) return; this.NextProcessFlowWhenWrong.SetParameters(this.DbConnection, this.DbCommand, this.DbTransaction); this.NextProcessFlowWhenWrong.Process(dataContext); } } /// <summary> /// 流程處理模板方法,供子類實(shí)現(xiàn) /// </summary> /// <param name="dataContext"></param> protected abstract void ProcessTemplate(DataContext dataContext); /// <summary> /// 記錄日志,供子類實(shí)現(xiàn) /// </summary> /// <param name="dataContext"></param> protected virtual void RecordLog(DataContext dataContext) { LogHelper.Record(dataContext); } /// <summary> /// 結(jié)束本次流程 /// </summary> protected void EndProcessFlow() { this.IsEnd = true; } /// <summary> /// 確定下一流程,后續(xù)候選流程名單在調(diào)用構(gòu)造函數(shù)的時(shí)候已經(jīng)初始化好 /// </summary> /// <param name="rightFlowOrWrongFlow"></param> protected void SetNextFlow(RightFlowOrWrongFlow rightFlowOrWrongFlow) { this.IsRight = rightFlowOrWrongFlow == RightFlowOrWrongFlow.Right; } /// <summary> /// 回滾操作流程 /// </summary> protected void RollBackProcessFlow() { this.DbTransaction.Rollback(); this.DbConnection.Close(); } /// <summary> /// 提交事物操作 /// </summary> protected void CommitProcessFlow() { this.DbTransaction.Commit(); this.DbConnection.Close(); } /// <summary> /// 設(shè)置下一流程單例屬性 /// </summary> /// <param name="param"></param> private void SetParameters(params object[] param) { var dbConnection = param[0] as IDbConnection; var dbCommand = param[1] as IDbCommand; var dbTransaction = param[2] as IDbTransaction; this.DbConnection = dbConnection; this.DbCommand = dbCommand; this.DbTransaction = dbTransaction; } }
/// <summary> /// 檢驗(yàn)授權(quán)碼流程,此流程應(yīng)當(dāng)作為所有業(yè)務(wù)流程的入口流程。會(huì)在此類中做一些特別的處理 /// </summary> public class CheckToken : ProcessFlowBase { public CheckToken(ProcessFlowBase processFlowWhenRight = default(ProcessFlowBase), ProcessFlowBase processFlowWhenWrong = default(ProcessFlowBase)) : base(processFlowWhenRight, processFlowWhenWrong) { //這個(gè)流程作為所有業(yè)務(wù)處理的入口流程,所以,我在這里要寫入一段初始化流程事務(wù)對(duì)象的代碼,僅執(zhí)行一次 base.DbConnection = LogHelper.CreateDbConnection(); base.DbConnection.Open(); base.DbCommand = base.DbConnectio
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注