none
Class設計上的請教 RRS feed

  • 一般討論

  • Dears;

    是這樣的,目前打算漸漸的把一些東西抽離出來成獨立的Class,讓前端UI AP不用管太多有關邏輯的部份
    ,利用Class及其相關的Methods提供給前端的AP做呼叫使用就好
    (其實之前已有不少東西已經是朝這個方向實作了),理想上是盡可能做到切割


    舉例來說:
    有個使用者的class,稱之為User,提供Insert(),Update(),Del()三個簡單的Method,以及幾個相關屬性(no,name,sex)
    當要新增一個User時,可能是前端的AP只要給定相關屬性後,再呼叫User.Insert() Method,進行新增動作,不需要去考量
    要寫到哪些Table或是要判斷什麼邏輯

    EX:
    User aaa = new User();
    aaa.no=xxxxx;
    aaa.name=xxxxx;
    aaa.sex=xxxx;
    aaa.Insert();

    這當中User Class裡當然包含了一些邏輯上的判斷,因此有可能因不符某些條件而拒絕新增,或發生Exception之類的
    ,所以勢必會有一些訊息或結果需要回傳,給予前端去顯示或判斷之用,之前的做法會是類似以下的方式

    if(!aaa.ActionResult())
    aaa.GetMessage();  <--回傳訊息




    想請教大家的是,在Class設計上有沒有什麼建議,或是上述的方式有沒有哪些可以改進的點

    PS:由於較難確認這個主題應該放在哪一個版,所以先以個人開發語言為主在C#版發,若有不當再請版主不吝告知,感謝
    2011年3月4日 上午 10:41

所有回覆

  • 線上手冊:

    throw (C# 參考)

    throw 陳述式用來表示在程式執行期間異常情況 (例外狀況) 的發生。

    備註

    擲回的例外狀況是一個物件,其類別衍生自 System..::.Exception,例如:

      複製程式碼
    class MyException : System.Exception {}
    // ...
    throw new MyException();

    通常 throw 陳述式和 try-catch 或 try-finally 陳述式一起使用。

    您也可以使用 throw 陳述式,重新擲回被攔截的例外狀況。如需更多詳細資訊和範例,請參閱 try-catch 和擲回例外狀況。

    範例

    這個範例說明如何使用 throw 陳述式擲回例外狀況。

    C#  複製程式碼
    public class ConstTest 
    {
      class SampleClass 
      {
        public int x;
        public int y;
        public const int c1 = 5;
        public const int c2 = c1 + 5;
    
        public SampleClass(int p1, int p2) 
        {
          x = p1; 
          y = p2;
        }
      }
    
      static void Main() 
      {
        SampleClass mC = new SampleClass(11, 22);  
        Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
        Console.WriteLine("c1 = {0}, c2 = {1}", 
                 SampleClass.c1, SampleClass.c2 );
      }
    }
    /* Output
      x = 11, y = 22
      c1 = 5, c2 = 10
     */
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年3月4日 下午 12:46
  • 依你所描述的你目前的方式是以程序式導向的副程式做法.並非物件導向模式
    如做法不變情況下給你幾個建議
    1.insert update delete不要放在User class內,而是另一個獨立的class來處理,譬如說
    public class DBUser
    {
    public static void Insert(User user);
    public static int Update(User user);
    public static int Delete(int userId);
    }

    而你的另一個問題比較正確的做法是你應該自行建立你的Exception類別,而在函式內throw 你需要的訊息(而在.net中有非常多通類的Exception class可以直接使用)
    譬如說
    public static Delete(int userId)
    {
    if(userid < 0)
    {
    throw new ArgErrorException("userId");
    }
    ...
    }

    而上述的方式還是基於程序式方式而非OO的做法,OO的模式下需要非常大的調整.

    2011年3月5日 下午 02:12
  • 感謝二位的建議

    關於回傳訊息的部份,已改採用Exception類別,原先是混合著使用(除了使用Exception之外,還外加自訂的Message Method)

    此外Class Methods的提供,現已調整為視前端所需功能提供,而不跟DB的操作綁定在一起

    ,畢竟很多前端所需功能並非是單純的Insert,Update,Delete而已

    2011年3月8日 上午 09:30