問題:
專案遇到一個滿棘手的問題,原本使用者需求希望我們產生的表單編號是(合約編號-四碼流水號)
假設合約編號是XR-332211,那所產生的表單單號為XR-332211-0001,這是原先的需求。
但是需求總是會變動的,這次使用者又覺得說這樣的表單單號太長,因為受限於一些環境需求,
而我們被迫要變動我們的程式。。。
若我們根據新需求來變動,那接下來問題又來了,若是現在這個專案是這樣,另外一個專案又需要另外的命名規則時,
我們是不是又要變動程式碼?這對我們程式設計師來說,最不希望看到的現象[不停的在修改我們的程式]。
解決方案:
跟林大哥討論完之後,他給我一個架構如下
我們在程式裡面針對Naming Rule設計一個合約(INaming),一個很簡單的GetName Method
接下來,我們實際設計一個Naming的物件(NC6Naming),並實作INaming的GetName
在這個物件中,建構式變成很重要的一個角色,
因為這裡需要別的地方提供所有可以供Naming的資料,
(此例中SpoolBaseObj有許多可以提供Naming的資料)
然後在ClientAPI中利用Reflect來操作IName取得表單命名字串。
這樣若往後需要不同的專案時,可以再新增Naming的物件,
只要在ClientAPI中,告訴它要使用的是哪一個Naming物件,就可以不用到修改原始程式碼,
又能接受這樣的需求變更。
2010-11-14
解決專案中不同Naming的問題
一個Class可以同時擁有兩個以上相同的Property或Method
看到這個標題,應該有很多人會感到很疑惑??
(蝦米??一個Class可以有兩個以上相同的Property或Method,怎麼可能?)
其實,若是操作Interface的話,這就不成問題
首先設計兩個不同的Interface(IA、IB),但是設計相同的屬性與Method
再來設計一個Class(TestInterface),並實作IA、IB
接下來實際操作這個物件,但在操作的時候請轉型成IA or IB操作
這樣就可以同一物件兩個以上相同屬性的操作
結果
這要使用在真正的設計中,其實還沒有頭緒??該用在哪?
我在想若是要使用來擴充新Method時,
但是卻遇到與之前所設計的Method有相同名稱時,可以借由這個方式另外操作??
(Method無法被Override的時候,只是那既然這樣到不如就設計一個新的Method就好?)
或許以後會有新的看法,先記錄下來。
2010-06-16
複習使用Attribute方法
已經很久沒使用Attribute的方式來設計程式,
今天有一個新專案正好可以適用到這個架構,
乾脆就順便來記錄一下,題外話結束。
1.首先建立一個Class並繼承Attribute
1: public class InfoAttribute:Attribute
2.並設定AttributeUsage屬性
1: [AttributeUsage(AttributeTargets.Class)]
2: public class InfoAttribute:Attribute
3.建立建構式(Constructor),到這一步驟其實設計已經完成。
1: public InfoAttribute(string BOName, ClassificationType mDocType)
2:
3: {
4: BONameField = BOName;
5: mDocTypeField = mDocType;
6: }
4.在自訂的Class上設定屬性資訊,可以看到下例兩個設定值,這是建構式所需要的。
1: [InfoAttribute("DocMaster", InfoAttribute.ClassificationType.DocMaster)]
2:
3: public class DocMasterInfo
5.若要在程式中使用屬性(Attribute),可使用System.Attribute.GetCustomAttribute的方法
1: Type t = this.GetType();
2:
3: Type tAttribute = typeof(InfoAttribute);
4:
5: _InfoAtt = System.Attribute.GetCustomAttribute(t, tAttribute) as InfoAttribute;
將它轉型成剛剛自訂的Attribute(InfoAttribute),即可在程式中使用。
使用Attribute的時機,通常是已經知道這個物件的特性,
藉由屬性設定來訂定物件的相關特性,
而不用藉由一堆程式撰寫,將這些已知的屬性設計進Class中,
在WCF裡,使用屬性方式來訂定傳輸的一些設定,透過屬性的設定之後,
就可以完成物件的設計。
PS.寫得很亂,還是先大致寫到這。
訂閱:
意見 (Atom)