C#Winform-DAL和BLL-使用静态方法好吗?

时间:2018-07-07 14:52:22

标签: c# methods static data-access-layer business-logic-layer

我遇到的疑问是有关在Winform应用程序中实现DAL和BLL访问层的过程中使用静态方法的问题。

我知道这里有很多关于该主题的文章,但是我找不到任何可以回答我的具体问题的文章。

简要介绍:我正在开发一个Windows窗体应用程序,该应用程序将被许多用户使用(每个用户使用他们在虚拟机上的帐户-因此基本上每个应用程序实例将由不同的用户帐户执行)。 因为我不需要保持许多对象的状态,所以我决定使用静态方法(直到现在是指某些操作),尤其是在DAL和BLL中执行诸如GetUserProfiles,GetProfileByUserName,AddNewUser,UpdateUserByUserID等操作...或使用一些信息(例如:当前正在运行该应用程序的用户,从DB中查找数据等)来保持应用程序的状态,这些信息在整个应用程序执行过程中都应保持不变。

我的问题/疑问:用静态方法实现对数据库访问的这些部分是否正确,因为仅需要信息来检索信息,并且我认为不需要状态,因为每次执行该状态就像是一个新的执行,而以前的状态是不必要的?

您认为这是否正确了我的思维方式和方法,还是我做错了我目前看不到的东西?

谢谢大家,我会给我一个建议,建议做些更好的事情。

2 个答案:

答案 0 :(得分:1)

尽管这个问题的答案完全取决于应用程序/安全性/性能/时间的大小……但是对于大多数专业开发人员而言,这被称为“最佳实践”。

也有人可能会说KISS(保持简单和愚蠢),但是如果您考虑未来,则应继续遵循最不熟悉的DAL最​​佳实践来进行设计。

假设第二年您的老板命令您在代码中使用Entity Framework,那么您会怎么做?如果您的代码只是一个成人代码,则需要大量的工作量才能将所有内容更改为EF。还是如果更改数据库引擎Oracle / MySql / SqlServer会发生什么?如果那里有很多代码,那么您将陷入严重困境。

如果您不打算使用复杂的模式,我建议至少将接口与Factory Design Patterin一起用于DAL。

要提及的另一件事是,使用静态类使每个用户的DAL单线程变得不适合Win Form应用程序。

因此,如果您希望应用程序具有灵活性和多线程功能,那不是最佳实践,但是如果您只是希望该应用程序可以在其中工作,就可以了。

答案 1 :(得分:1)

静态成员(方法,属性等)不能从面向对象(即多态性,继承,接口实现等)中受益。

如果您使用的是存储库模式,则可以概括事物并保持向特定存储库添加特定方法的能力。存储库可以描述为:

public interface IRepository<T>
{
    T GetById(int id);
    List<T> GetAll();
    void Create(T entity);
    void Delete(T entity);
    void Update(T entity);
}

这只是一个示例,您可以根据自己的需要进行调整。

作为灵活性的示例,假设CSV导出器接受具有方法的存储库

public void Export<T>(string file, IReporistory<T> repository)
{
    ...
    List<T> result = repository.GetAll();
    ...
}

在实现该接口的UserProfileRepository中,您仍然可以添加接口中未定义的方法GetProfileByUserName

如果您希望它更静态,则可以将接口实现为singletons