【发布时间】:2020-05-05 08:15:32
【问题描述】:
我是编程初学者,因为我的经验是 0:我从未开发过任何应用程序。几个月前,我开始使用 SQL Server 数据库在 WPF/C# 中开发桌面应用程序。
随着我对数据库越来越熟悉,我做的第一件事就是创建我的数据库以及所有的表和关系。我知道我不想在我的应用程序中包含我的查询,所以我创建了 100 多个存储过程,其中包含必须在我的应用程序中实现的所有逻辑。现在我已经完成了我的 UI 的创建,我即将开始编码,我要做的第一件事是在我的应用程序和我的数据库之间建立一个连接,我知道包含我的连接字符串不是一个好习惯,由于未来维护问题的风险,App.config 中的数据库用户/密码。
我相信最好的办法是在我的应用程序和我的数据库之间有一个层,我可以在其中存储连接信息,以便我的应用程序可以与该层以及与数据库的层进行交互。我的问题是:我该怎么做?我在这里看到了建议创建 WCF 服务的答案。这对我来说就像一门外语,但我非常愿意学习。我想对编程经验为 0 的人是否可以实现这样的架构或我应该放弃一些反馈。有没有这种实现方式的开源文档?
其次,关于我的应用程序,我是否应该了解其他最佳做法?例如:
我已经实现了 RBAC 方法,但所有访问控制都在我的存储过程中实现。可以吗?
连接到应用程序需要用户名和密码。这些信息存储在我的数据库中的一个表中。我正在考虑加密密码字段。
该应用程序可以分发给多个客户端。我正在考虑实现三个不同的数据库(测试、接受和生产,也可能在不同的服务器中),对于每个客户端,我将在数据库中创建一个特定的模式,以便每个客户端都有自己的对象。这样,来自不同客户端的数据之间就不会发生交互。问题是向新客户提供应用程序将需要自定义所有内容(模式、表、过程、功能......),但我觉得这可能会导致维护问题,因为每次更改都必须应用于每个客户的模式。
关于 DB 连接,虽然可以在 App.Config 中包含连接字符串,但在 Visual Studio 中,也可以直接连接到 DataSources 中的数据库。最好的方法是什么?
我可能会错过其他一些事情,但如果能对这些问题提供反馈,那就太好了。
【问题讨论】:
-
哇,这是一个相当深远的问题 - 它需要一个相当深入的答案(并不是我们不在这里做深入的答案,但分解你的问题可能是有益的成多个更密切相关的问题)。我应该指出,您可能无法回答您提出的每个问题,因为其中一些问题是基于意见而不是基于事实
-
我知道这些问题很多,但我真的愿意就此进行交流。因此,如果您可以就问题中的任何一点分享任何意见,那就太好了
-
这可能是 SO 不打算做的主要事情之一; “关于这个的交换”——我知道网络被称为堆栈交换,但实际上并没有任何来回讨论;这是一个可以回答问题的网站,而不是像经典论坛那样讨论想法
-
那么也许你可以在 reddit 上放一些东西。我也有同样的问题:reddit.com/r/csharp/comments/eqlupg/…
标签: c# .net database database-connection desktop-application