|
|
1
4
我的哲学是数据访问的东西在标记中没有业务。对象数据源比SQL数据源更好,但我喜欢将标记保留为将在页面上呈现的唯一内容。我还喜欢您对数据绑定内容的控制,这些数据绑定内容总是从代码后面得到的。 |
|
|
2
2
好问题! 就数据绑定而言,您应该只将其视为 总体数据访问策略的一个组成部分。 我的策略有三个组件(我在组件2中了解到您的数据绑定): 首先,我总是创建(或重用)一个数据访问层(DAL)来简化数据访问。这是 不 因为我可能有一天会把你的数据库换成另一个——这种可能性很小,不足以保证所有需要的工作(雅格尼)。这样做是为了a)从普通数据库代码中删除所有混乱(例如获取连接字符串、设置和关闭连接等);b)使用专用函数简化常见操作。 其次,你绝对 应该 实现用于封装UI控件的数据绑定的对象数据源。如果你已经建立了一个好的DAL,这将变得非常微不足道。例如,这里有一个使用我的DAL的对象数据源:
需要注意的几点:“dataobjectmethodattribute”属性将使该方法对设计时环境可见,以便在链接网格(或其他)时在数据源的下拉列表中看到它。您还需要提供此方法的类的[dataObjectAttribute]属性(如果该类是我的业务层的一部分,则为该类)。最后,这是一个非常简单的例子,并且没有一些常见的结构,比如startrowindex和maximumrows参数来返回分页结果。 注意这里的特殊调用来自于我的dal——它不是linqtosql,尽管它有一个表面相似性。我喜欢SQL,但我不喜欢 希望 C习语 just have an arbitrary mapping back to SQL anyway . 请注意,如果我试图在直接的ADO调用中实现所有这些,那么这个函数的长度将是它的三倍,并且有很多代码实际上与表达我的目标无关。 第三,我总是在存储过程中放置多步数据库操作,以最小化通过连接到数据库的调用次数。例如,我在一个产品中提供了一个“签入”功能,它接受签入请求,对照成员表检查它,检索以前的签入历史记录(上个月有多少次访问?)如果合适的话,奖励奖励奖励积分等。在C代码中运行对数据库的多个查询和更改将非常复杂和昂贵。根据我们的DAL理念,我还将对存储过程的调用封装在DAL中,以便代码的实际调用只是: int status=dal.checkin(用户ID,参考checkinHistory); 如您所见,使用存储过程并将其封装到C类方法中也会使代码 远的 更容易阅读。我的代码只是说明它的作用(如上所述),而不是有100多行代码设置查询等。 希望这有帮助! |
|
|
3
0
为了完整起见,我想在第一个答案中添加关于我的评论的内容。 我问了以下问题:
当数据绑定时,如果强制转换对象,则会在编译时检测到它,如果属性名已更改或不再存在。 例:
此外,这样做将避免使用eval,据报道eval速度较慢,因为它使用反射。(我自己没有真正检查性能影响) |
|
|
simply lemon · python上链表的添加方法 1 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 1 年前 |