2012-02-29 8 views
0

これは標準的なものですか?基本的には自分自身のリストを返しますか?実際のフィールド(ID、タイトルなど)は別のクラスにする必要がありますか?私はC#オブジェクト/デザインの基礎

おかげdown--これらの基礎の一部を取得&を試してみたいプロジェクト&を始めている

を(私は人々がDTOオブジェクトと呼んで見てきました)!

public class Calendar 
{ 
    public int id { get; set; } 
    public string title { get; set; } 

    public List<calendar> GetAll() 
    { 
     var list = new List<calendar>(); 

     var db = new mssql2(); 
     db.set("s1"); 
     string sql = @"select * from [cal]"; 
     var dr = db.dr(sql); 
     while (dr.Read()) 
     { 
      var e = new calendar(); 
      e.id = (int)dr["id"]; 
      e.title = dr["title"].ToString(); 
      list.Add(e); 
     } 
     return list; 
    } 
} 
+0

FYIでは、標準について言及しているので、クラス名、プロパティ名、およびメソッド名は通常、TitleCaseを使用します。 – Brandon

+0

いくつかの問題:1)C#では、一般的な命名規則はイニシャルキャップのラクダケーシングなので、クラス名はカレンダーになり、get_all関数の名前はGetAllになります(ただしこれは純粋に文体であり、 )短い変数名は一般的には眉をひそめます。 3)get_allは静的関数としては良いかもしれません。 – PlayDeezGames

+1

なぜカレンダー変数が "e"と呼ばれていますか?また、なぜそれをもう一度スローしようとしているのであれば、例外をキャッチする(これを行うとスタックトレースが壊れる)? – cbp

答えて

7

ドメインモデルとデータアクセス層を混在させているようです。

独自のクラスとしてカレンダーを保持し、カレンダーオブジェクトのリストを返すCalendarServiceまたはCalendarRepositoryという別のクラスを作成することもできます。ここ

は一例であり:

public class Calendar 
{ 
    public Calendar() { } 
    public Calendar(int id, string title) 
    { 
     Id = id; 
     Title = title; 
    } 
    public int Id { get; set; } 
    public string Title { get; set; } 
} 

public class CalendarService 
{ 
    public static List<Calendar> GetAll() 
    { 
     var list = new List<Calendar>(); 

     var db = new mssql2(); 
     db.set("s1"); 
     string sql = @"select * from [cal]"; 
     var dr = db.dr(sql); 
     while (dr.Read()) 
     { 
      // Use the constructor to create a new Calendar item 
      list.Add(new Calendar((int)dr["id"], dr["title"].ToString())); 
     } 
     return list; 
    } 
} 
+0

何か足場を助けてくれますか?私はデータアクセスなどを切り離したいと思っていますが、そのように見えますか?あなたはインターフェイスなどを使用していますか? –

+0

@ScottK、更新を参照してください。必要に応じてインタフェースを使用することができます。小規模なアプリケーションでは、私が必要としない単なるレイヤーなので、実際にはインターフェイスを使用しません。あなたが望むと決めたら、彼らは追加するのが難しくありません。 – Brandon

+0

はすばらしく見えますが、どうやってデータベース/ SQL文を処理しますか?同じ4行を全部繰り返します。 –

2

一般的な考え方は、クラスがドメインを表現するためのものである、それらのドメインオブジェクトの、およびクラスメンバー各種プロパティオブジェクト。クラス関数はオブジェクトが何を行うことができるかを表します

場合によっては、get_all()をいくつかのクラス抽象化データベース操作に削除するのが適切かもしれません。 Calendarにはカレンダーの機能があります(日付の取得/設定、スキップ年の取得、予定の取得/設定)。あなたがカレンダーで達成したいことに依存します。

Object design

+0

偉大な画像 - 私は実際に(jquery/ajax) - (コントローラ) - (自分自身のイベント()オブジェクト) - >今のように複数のカレンダーを追加したいのですが、私のコードは変更するのが難しいです - ありがとうございます! –

0

あなたはしっかりとデータアクセスを結合していて、あなたの「GET_ALL」方法でもタイプのカレンダーのオブジェクトから何かを使用していません。この場合のように、メソッドが属しているクラスのインスタンスからのデータを使用していない場合、そのメソッドは存在しないか、静的メソッドである必要があります。私の好みは、前者のためのものです - データベースからカレンダーやカレンダーを取り出すことを目的としたクラスがあります。より合理的なコード構成であり、テスト可能であり、データレイヤーからより簡単に抽象化することができ、データオブジェクトの移植性を向上させます。