我开发了一个在头版和控制面板上都具有CRUD功能的网站。我看到我在尝试连接和CRUD时为每个页面编写了相同的代码。
我没有足够的时间研究如何优化我的代码,我刚刚写了我需要的东西。我也受了伤。但我没有其他机会。
例如:
我有一个数据库,当然我需要一个连接字符串。我需要将记录读入页面(比方说)blogs.aspx。 在另一个页面news.aspx我需要再次建立一个新连接,我创建一个新的Sqlconnection实例。
正如我所说,我现在有超过40页,并且有很多重复的数据库连接,datagridview填充代码。
我的问题:
在母版页(Site.Master)中定义Connection,DataTable,DataAdapter,Command实例是一种好方法吗?或者封装概念会阻止我吗?
如果我写了一个名为konnekt.cs的类,我将如何将其对象继承到当前页面?换句话说,我如何从当前页面扩展到konnekt.cs?
也许我会得到负面投票,但我认为这种风险值得学习这些概念。 我是c#以及其他编程语言的新手。
感谢您的提示。
答案 0 :(得分:5)
您需要做的是学习“关注点分离”的概念。这基本上意味着你根据它的作用划分你的代码。现在(根据我从您的问题中所理解的),您的所有代码都在一个地方。就像你已经注意到的那样,不是一件好事。当然它现在有效,但是一旦你需要进行修改,你就会遇到问题。
最基本的是,您需要分离操作数据库中数据的代码(通常称为数据访问层)和显示该数据的代码(表示层)。当加载页面(表示层)时,它调用数据访问层以从中获取数据(页面不直接调用DB),依此类推。通常,在这两者之间存在第三层,称为业务层,具有业务规则逻辑。
在母版页(Site.Master)中定义Connection,DataTable,DataAdapter,Command实例是一种好方法吗?或者封装概念会阻止我吗?
这不是个好主意。母版页属于演示文稿,因此放置任何直接调用DB的内容都是不行的。
如果我写了一个名为konnekt.cs的类,我将如何将其对象继承到当前页面?换句话说,我如何从当前页面扩展到konnekt.cs?
再一次,永远不要直接从您的页面调用数据库。构建另一个连接到数据库的类,让页面调用 类。
答案 1 :(得分:0)
您可以在其他类中定义这些方法,只需从后面的代码中调用它们即可。或者在一个共同的基类中定义其中一些
2你必须创建自己的基类
答案 2 :(得分:0)
与System Down一样,我的建议在页面代码中丢弃了db代码..使用App_Code文件夹。
在页面文件代码中,您必须编写方法/属性/ etc来执行页面工作,而不是数据库工作。
对于常见的页面代码,您可以将其放在c#文件中(总是在App_Code下),
扩展System.Web.UI.Page
类。
示例App_Code / PageBase.cs:
public class PageBase : System.Web.UI.Page
{
// common code
}
示例Default.aspx.cs:
public partial class _Default : PageBase // instead of System.Web.UI.Page
{
}