新项目中应该考虑哪些因素来选择数据访问层?

3

我即将教授一门课程,需要解释哪些因素应该影响您对数据访问技术的决策。

我熟悉许多数据访问方法,如Typed Data Sets、Linq to SQL、Linq to Entities、.netTiers、LLBLGen以及使用SQL连接对象和命令对象的自定义调用。

有些客户只允许使用存储过程,并且不会讨论其他任何事情。

有些客户还没有准备好安装.NET 3.5。

一些客户要求在任何Web应用程序中都必须有一个中间Web服务层。

大多数情况下,我使用Types Data Sets和Custom Web Services,或者使用.netTiers和CodeSmith。我还应该考虑什么?


一个项目选择数据访问层应该考虑哪些因素? - Bobby Jack
4个回答

3
重要的一点是要记住,数据库不仅仅是应用程序(独立地)的后备数据存储。其他应用程序和进程最终可能需要访问数据库,特别是在大型或“企业”数据库(或应用程序)中,尤其是足够长时间之后。
需要考虑以下几点:
  • ETL/加载/迁移
  • 外部集成/同步(BizTalk/SSIS)
  • 其他应用程序的重复使用(特别是网站、移动应用等)
  • 安全性/攻击面(是否有一种方法比另一种更安全?)
  • 维护任务
  • 可用性-数据库会24/7使用吗?有一种方法比另一种提供更好的可用性吗,等等。
  • 此外,需要考虑一些设计方面的问题。您是调整以获得更快的选择还是更快的写入?一个数据访问设计可能比另一个表现更好。
    我并不是说有一个万能解决方案,但我要警告的是,任何数据访问设计模式都需要进行“全局思考”——它是否能够解决今天的问题以及您可以合理预测的未来需求?
    此外,您是否将提供外部API或某些框架以实现一致的数据访问?它将直接或间接地公开吗?
    我认为,Entity Framework/LINQ to SQL、传统的存储过程以及NHibernate(等)等工具都有其应用的场合,但您应该首先证明和合理化选择技术,并努力确保其适用于当前和未来的需求。
    编辑:对不起,我忘记了一个重要问题:可维护性。一些模板驱动的解决方案在模式更改后能够重新生成DAL,而其他解决方案(如手写存储过程)则没有这个优势。需要权衡生产力收益与缺点。

    2

    在软件项目中,就像所有选择一样:这取决于……但在我看来,最重要的因素是项目环境。

    这包括以下内容(我不认为这个列表是完整的):

    • 开发团队和维护团队(如果不同)内的可用技能
    • 所需功能
    • 客户设定的限制(并非所有客户都支持所有可用技术。当逐步替换旧系统或向环境引入新系统时,这肯定是您需要考虑的事情)
    • 法规设定的限制

    希望这对您有所帮助。


    1

    我认为在你的原始帖子和norbertB的补充之间,你们已经涵盖了几乎所有的内容。首先从绝对的限制开始(记住,即使客户一次说不,即使他们说这是绝对的,也并不意味着你不能帮助改变他们的想法...)。一旦你用绝对的限制缩小了范围,就可以看看其他的东西。

    有一件事似乎被忽略了,那就是灵活性。例如,如果我试图在两种类似的技术之间进行选择,并且我知道其中一种可以支持可更新的视图,而另一种则不行,即使我当时绝对没有需要可更新的视图,我仍然会倾向于选择那个“以防万一”。


    0

    我只考虑了两件事情。第一,我是否会有太多的数据,以至于其他任何事情都无关紧要。如果你没有将数百万行数据插入表中,那么使用哪种技术可能并不重要,因为它们都足够快。

    第二个问题是我是否可以使用LINQ,因为我发现使用LINQ(无论是SQL、实体还是LLBLGen)查询数据库可以带来两个重要的好处。第一个是编写查询非常容易,第二个是在需要LINQ的两个框架之间进行切换相对容易,以防需求变化。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接