编程对象通知



我知道这是一个很复杂的问题,可能有很多很多答案,但是.....我正在创建一个小应用程序,供我自己和其他几个朋友使用,如果有更多的人喜欢它,我会分发给他们。这是一个简单的应用程序,用于跟踪健身人士的客户。它将跟踪客户,付款,付款历史,日程安排,文件(照片,电子邮件等),也许更多,但总的来说是一个非常简单的程序。是的,使用SQLExpress作为后端。我的问题是:设计这个应用程序所需的对象的最佳方法是什么?我读过关于数据访问层和业务对象的文章,但从来没有真正从头创建过一个。我正在考虑拥有客户端,付款等对象,当然还有与之相关的所有属性,但是当涉及到修改数据库时,添加,更新,删除等方法应该在对象中,或者它们是否会驻留在DAL中,对象只是传递存储过程名称?

我知道我可能遗漏了很多信息,但希望你能得到我正在努力做的要点。

**回复一些帖子:

我同意将对象与dal分开,但我需要阅读更多关于如何以这种方式设计它的内容…同样,我是OO编程的新手,所以我不能完全了解整个情况。

这是一个朋友做的DAL,让我使用:

namespace DataAccess{
public class SQLDataBase
{
    public SQLDataBase();
    public SQLDataBase(string EncodedConnectionString);
    public SQLDataBase(string EncodedConnectionString, int ConnectionTimeout);
    public string ConnectionString { get; set; }
    public int ConnectionTimeout { get; set; }
    public string EncodedConnectionString { get; }
    public void RunSpGetScaler(string spName, SqlParameter[] parms, ref DateTime ReturnValue);
    public void RunSpGetScaler(string spName, SqlParameter[] parms, ref decimal ReturnValue);
    public void RunSpGetScaler(string spName, SqlParameter[] parms, ref int ReturnValue);
    public void RunSpGetScaler(string spName, SqlParameter[] parms, ref string ReturnValue);
    public DataSet RunSpReturnDS(string DatasetName, string spName);
    public DataSet RunSpReturnDS(string DatasetName, string spName, SqlParameter[] parms);
    public int RunSpReturnRecordCount(string spName);
    public int RunSpReturnRecordCount(string spName, SqlParameter[] parms);
    public string RunSpReturnString(string spName, SqlParameter[] parms, string returnParm);
    public SqlConnection RunSqlConnection();
}

}

很简单……我唯一的问题是,当我创建任何对象来使用它时,我必须为我对DB的每次调用编写方法....例如:

   //Declarations - which I don't thinkk should be in the object itself
    private DataAccess.SQLDataBase oDatabase = null;
    private string sEncodedConnectionString = app.Default.EncodedDBString;
    private int iConnectionTimeout = 15;
    public DataSet GetClientInformation(int iClinetID, string sClientName)
    {
        oDatabase = new SQLDataBase(
            sEncodedConnectionString, iConnectionTimeout);
        string spName = "GetClientInformation";
        string dsName = "GetClientInformation";
        try
        {
            SqlParameter[] Params = new SqlParameter[2];
            Params[0] = new SqlParameter("@ClientID", iClientID);
            Params[1] = new SqlParameter("@ClientName", sClientName);
            DataSet ds = oDatabase.RunSpReturnDS(dsName, spName, Params);
            return ds;
        }
        catch (Exception e)
        {
            throw (e);
        }
    }

对于我的客户端对象,我已经有了这个和其他几个方法来添加,修改或选择"客户端"的数据。从逻辑上讲,这对我来说没有意义,因为如果没有其他一些依赖关系,我似乎无法使用它。

创建单独的层允许您的应用程序分离关注点。UI(和其他主机)访问一个易于使用的面向对象模型,而不需要知道数据是如何存储的。在像MVC这样的模式中,你甚至可以在视图和模型之间设置一个控制器层。这是另一个很好的研究模式。

对象模型使用数据访问层,并不直接知道数据是如何存储和检索的。数据访问层可能更扁平一些,更侧重于能够有效地访问和写入数据。公共对象模型层需要是一个很好的面向对象层,你可以在上面维护竞争。

使用图层的其他原因:

  • 最大限度地减少变更的流失:您可以交换存储方式,同时影响尽可能少的层,子系统和代码。
  • Testing:可以模拟完整的层来对高层进行单元测试。
  • 解耦实现:你可以从一个简单的层(如文件等)开始,而你等待其他层的其他一些(或未来的开发)。

我将从阅读和理解n层架构开始。这将帮助您理解对逻辑单元分离和抽象的需求。从那里,如果你正在使用SQL Server和。net,看看微软实体框架作为你的数据访问层。它入门简单,功能强大。

最新更新