簡體   English   中英

C#對象/設計基礎

[英]c# object/design fundamentals

這是一種標准的,良好的做法嗎? 基本上返回本身的列表? 實際字段(ID,標題等)是否應該是單獨的類? (我見過人們稱其為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;
    }
}

您似乎正在將Domain模型與Data Access層混合在一起。

將Calendar保留為其自己的類,並可能使另一個類稱為CalendarServiceCalendarRepository ,該類將為您返回Calendar對象的列表。

這是一個例子:

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;
    }
}

一般的想法是,類代表域對象 ,並且類成員具有這些域對象的各種屬性 類函數將表示對象可以做什么

在您的情況下,將get_all()刪除到一些抽象數據庫操作的類上可能更合適。 Calendar具有Calendar的功能(獲取/設置一些日期,獲取跳過的年份,獲取/設置一些約會); 取決於您要完成的日歷。

對象設計

您正在緊密耦合數據訪問,並且您的“ get_all”方法甚至沒有使用日歷類型的對象中的任何東西。 如果在這種情況下,您的方法不使用其所屬類的實例中的任何數據,則該方法應不存在,或應為靜態方法。 我的偏好是使用前者-擁有一個旨在從數據庫中檢索一個或多個日歷的類。 它是更明智的代碼組織,更易於測試,可以更輕松地從數據層抽象出來,並且還使您的數據對象更具可移植性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM