Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c对象/设计基础_C#_Object - Fatal编程技术网

C# c对象/设计基础

C# c对象/设计基础,c#,object,C#,Object,这是一种标准的、良好的做法吗?基本上返回自己的列表?实际的字段id、标题等是否应该是一个单独的类?我见过人们把它叫做DTO对象 我正在开始一个项目&我想试着把这些基本原理都写下来- 谢谢 public class Calendar { public int id { get; set; } public string title { get; set; } public List<calendar> GetAll() { var li

这是一种标准的、良好的做法吗?基本上返回自己的列表?实际的字段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;
    }
}

您似乎将域模型与数据访问层混合在一起

将Calendar保持为自己的类,还可以创建另一个名为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;
    }
}

一般的想法是,类表示域对象,类成员表示这些域对象的各种属性。类函数将表示对象可以做什么

在您的情况下,删除get_all to a some类抽象数据库操作可能更合适。日历将具有日历获取/设置某些日期、跳过年份、获取/设置某些约会的功能;这取决于你想用日历完成什么


您的数据访问是紧密耦合的,您的get_all方法甚至没有使用类型为calendar的对象中的任何内容。如本例所示,如果您的方法不使用它所属的类实例中的任何数据,那么该方法要么不存在,要么应该是静态方法。我更喜欢前者——有一个类,其目的是从数据库中检索一个或多个日历。它是一种更合理的代码组织方式,更易于测试,更容易从数据层抽象出来,也使数据对象更易于移植。

FYI,因为您提到了标准,类名称、属性名称和方法名称通常使用TitleCase。一些问题:1在C中,通用命名约定是初始大写,所以你的类名应该是Calendar,你的get_all函数应该命名为GetAll,但这纯粹是风格上的,与第二期没有密切关系。短变量名通常是不受欢迎的。3 get_all作为一个静态函数可能更好。为什么日历变量称为e?另外,如果您打算再次抛出异常,为什么要捕获该异常?这样做会破坏堆栈跟踪?捕获异常并立即重新抛出没有意义。很可能您根本不需要异常处理代码。我更喜欢依靠中央未处理异常处理程序来解决数据库连接问题。如果您想正确掌握基本原理,请从使用Microsoft的编码标准开始。另外,永远不要使用掷骰,只要我们掷。否则会丢失堆栈跟踪。为了回答您的问题,我认为在类中使用属性而不是字段是可以的,除非您想将代码类与数据类(也称为POCO)分开。您能帮我搭建一些框架吗?我想分离出数据访问等。。。那看起来像什么?您是否使用接口等-?@ScottK,请参阅更新。如果需要,可以使用接口。对于小型应用程序,我并不真正使用接口,因为它们只是我不需要的附加层。如果您决定要添加它们,它们并不难。看起来很好,您将如何处理数据库/sql语句-我在所有地方重复这4行-@ScottK,如果您需要重用代码,请将其放在另一个类中。不过,你有点偏离了原来的问题。我认为如果你把你的一些东西发布在代码审查上,你会得到更好的服务。像这样的网站是专门为人们发布代码和获取反馈而设计的。我不知道这个网站-也许我应该注册并转移这个?这是一个很棒的图片-我实际上有一个正在运行的asp mvc应用程序,使用jquery fullcalendar将事件jquery/ajax控制器填充/保存/编辑到我自己的事件对象->现在我正在尝试重构它,因为现在我想添加多个日历&我的代码很难更改-谢谢!