如何说服我的同事不要使用数据集进行企业开发(.NET 2.0+)

时间:2008-09-01 02:16:18

标签: oop

与我合作的每个人都沉迷于以数据为中心的企业开发方法,并讨厌使用自定义集合/对象的想法。说服他们的最佳方式是什么?

16 个答案:

答案 0 :(得分:21)

以身作则,轻轻踩踏。任何更强大的东西都会让你与团队的其他成员疏远。

记得考虑一下他们错过的东西的可能性。成为团队的一员意味着轮流学习和学习。教学。

没有一个人能得到所有答案。

答案 1 :(得分:10)

如果您正在处理遗留代码(例如,从.NET 1.x移植到2.0或3.5的应用程序),那么离开数据集将是一个坏主意。为什么改变已经有用的东西?

但是,如果您正在创建新应用,那么您可以引用一些内容:

  • 呼吁在维护坚持使用DataSet的应用程序时遇到痛苦
  • 为您的新方法引用性能优势
  • 以良好的中间地带诱饵。转移到.NET 3.5,并推广LINQ to SQL,例如:虽然仍然坚持数据驱动架构,但是对字符串索引数据集来说是一个巨大的,巨大的背离,并强制执行......瞧!自定义集合 - 以对它们隐藏的方式。

重要的是,无论你使用什么方法,你都保持一致,而且你对你的方法的利弊完全诚实。

如果所有其他方法都失败了(例如,你有一个开发团队完全拒绝接受旧的做法,并且对学习新事物持怀疑态度),那么这是一个非常非常明确的标志。离开你的团队是时候离开公司了!

答案 2 :(得分:9)

  

记得考虑一下他们错过的东西的可能性。成为团队的一员意味着轮流学习和学习。教学。

借调。 “企业发展”在某种程度上不同于(通常暗示“比'更重要')正常发展的整个想法真的让我感到烦恼。

如果使用某些技术确实有好处,那么您需要提出一个考虑清单,列出切换后可能出现的所有利弊。
将此列表提供给您的同事以及每个人的解释和示例。

创建此列表时必须切合实际。你不能只说“节省我们很多时间!!!赢!”如果没有解决这样一个事实,即有时需要花费更多时间,需要X个月才能加快新技术的发展,等等。你必须展示具体的例子,它将节省时间,以及确切的方式。

同样地,你不能仅仅因为无关紧要而轻描淡写,你的同事给你打电话。
如果你不做这些事情,或者只是推动你个人喜欢的事情,那么没有人会认真对待你,而你只会因为充满热情和精力但又不知道的人而声名鹊起关于任何事情。

顺便说一句。留意这个特殊的骗局。它将胜过一切,除非你的所有其他东西都有很多的强大案例:

  • 需要12个月以上的时间来移植我们现有的代码。你输了。

答案 3 :(得分:7)

当然,“这取决于”情况。有时DataSet或DataTables更适合,例如它实际上是非常轻的业务逻辑,实体/记录的平面层次结构,或具有一些版本控制功能。

当您想要实现无法在平面2D表格中有效表示的对象的深层次结构/图形时,自定义对象集合会闪耀。您可以演示的是一个对象的大图,并使某些事件沿正确的分支传播,而不会在其他分支中调用不适当的对象。这样就没有必要循环或选择通过每个DataTable来获取子记录。

例如,在我两年半前参与的项目中,有一个UI模块应该在单个WinForms DataGrid中显示问题和答案控件(更具体地说,它是Infragistics的UltraGrid) 。一些更棘手的要求

  • 问题的答案控件可以是任何 - 文本框,复选框选项,单选按钮选项,下拉列表,甚至可以弹出可能会提取更多数据的自定义对话框来自网络服务。
  • 根据用户的回答,它可以触发更多子问题直接显示在父问题下。如果稍后给出不同的答案,则应该公开与该答案相关的另一组子问题(如果有的话)。

最初的实现完全是用DataSet,DataTables和数组编写的。在多个表中循环数百行的数量纯粹令人费解。它没有帮助程序员来自C ++背景,试图 ref 一切(你好,生活在堆中的对象使用引用变量,就像指针一样!)。没有人,甚至是最初的程序员,都无法解释为什么代码正在做它的功能。在这之后的六个多月里,我进入了这个场景,并且它充满了臭虫。难怪我接手的第二代开发人员决定退出。

两个月的时间来解决混乱的混乱局面,我自己把它重新设计成object-oriented graph to solve this problem整个模块。 yeap,完成抽象类(根据问题类型在网格单元格上呈现不同的答案控件),委托和事件。最终结果是2D数据网格绑定到深层次的问题,自然地根据父子安排进行排序。当父问题的答案发生变化时,它会向孩子提出一个问题,他们会根据父母的答案自动显示/隐藏他们在网格中的行。只有该路径下的问题对象才会受到影响。与旧方法相比,此解决方案的UI响应度达到了数量级。

答案 4 :(得分:5)

具有讽刺意味的是,我想发布一个与此完全相反的问题。我使用过的大多数程序员都使用了自定义数据对象/集合方法。看到有人在一台显示器上打开SQL Server表定义,在另一台监视器的Visual Studio中慢慢键入一个匹配的行包装类(每个列都有私有属性和getter-setter),这让我心碎。如果他们也倾向于创建60列表,那就特别痛苦。我知道有些ORM系统可以自动构建这些类,但我已经看到手动方法的使用频率更高。

工程选择总是需要在可用选项的优缺点之间进行权衡。以数据集为中心的方法有其优点(类似于db-table的内存中实际数据库表示,由知道他们正在做什么的人编写的类,大型开发人员熟悉的等等),自定义数据对象也是如此(编译类型检查,用户不需要学习SQL等)。如果贵公司的其他人都在使用DataSet路由,那么至少从技术上来说,DataSet是他们正在做的事情的最佳选择。

答案 5 :(得分:3)

数据集/表格不是很糟糕吗?

我可以给出的最佳建议是在您自己的代码中尽可能多地使用它,并希望通过同行评审和错误修正,其他开发人员将看到代码如何变得更具可读性。 (确保在发生这些事件时推动这一点)。

最终如果代码有效,那么剩下的就是语义就是我的观点。

答案 6 :(得分:2)

我想你可以尝试销售O / R映射和映射工具的想法。将行视为对象的好处非常强大。

答案 7 :(得分:2)

我认为你应该专注于表现。如果您可以创建一个应用程序,该应用程序在使用DataSet和Custom Entities时显示性能差异。此外,尝试向他们展示领域驱动设计原则以及它如何适应实体框架。

答案 8 :(得分:2)

不要将其作为宗教或信仰讨论。那些很难赢(而且不是你想要的)

请勿按照您在问题中的方式构建框架。问题不是让任何人同意这种方式或方式是他们应该工作的一般方式。你应该谈谈每个人如何思考,以便在任何特定的时间做出正确的选择。举例说明何时使用dataSet,何时不使用。

我让开发人员使用dataTables存储他们从数据库中获取的数据,然后使用该dataTable获得业务逻辑代码......我向他们展示了我如何减少加载页面的时间,从而花费7秒的100%CPU(在Web服务器上)通过将内存对象从dataTable更改为Hash表,根本无法看到CPU行移动。

因此,举一个例子或案例表明你的事情更好地以不同方式实施,并赢得那场战斗。不要打一场高水平的战争......

答案 9 :(得分:2)

如果互操作性是/将成为一个问题,DataSet绝对不是正确的方向。您可以通过服务公开DataSets / DataTables,但无论您是应该还是有争议。如果您正在谈论.NET-> .NET,那么您可能会好的,否则您将会遇到一个非常不满意的客户端开发人员,而这个开发人员正在消耗您的服务?

答案 10 :(得分:1)

否则你无法说服他们。选择较小的挑战或转移到其他组织。如果您的经理尊重您,您可以看看您是否可以将域驱动风格的项目作为一种技术试验。

答案 11 :(得分:1)

如果您可以进行个人资料,只需执行此操作即可。数据集比简单的Collection<T>

更重

DataReader比使用适配器更快......

更改对象中的行为比按摩数据集

要容易得多

无论如何:做到这一点,请求原谅而不是许可。

答案 12 :(得分:1)

大多数程序员不喜欢偏离他们的舒适区域(请注意,'大多数程序员'集和'Stack Overflow'集合的交集可能是空集。) “如果之前有效(或者甚至只是工作),那就继续这样做”。我目前正在进行的项目需要大量的论据来让老程序员使用XML /模式/数据集而不仅仅是CSV文件(以前的软件版本使用CSV)。它并不完美,模式在验证数据时不够健壮。但这是朝着正确方向迈出的一步。我开发的代码在数据集上使用OO抽象而不是传递数据集对象。一般来说,最好通过示例教导,一次只做一小步。

答案 13 :(得分:0)

这里已经有了一些非常好的建议,但你仍然有一份工作要说服你的同事,你是否需要支持你的一些关于stackoverflow的支持性评论。 并且,如果他们听起来持怀疑态度,那么你将需要更多的弹药。 首先,获取Martin Fowler的“企业架构模式”的副本,其中包含对各种数据访问技术的详细分析。 阅读。 然后强迫他们全部阅读。

完成工作。

答案 14 :(得分:0)

以数据为中心意味着更少的代码复杂性。

自定义对象意味着可能有数百个其他对象要组织,维护和普遍使用。它也会更快一些。

我认为这确实是代码复杂性与性能问题,可以通过应用程序的需求来解决。

答案 15 :(得分:0)

从小处开始。是否有可用于说明您的观点的实用程序应用程序?

例如,在我工作的地方,主应用程序有一个复杂的构建过程,涉及更改配置文件,安装服务等。

所以我写了一个应用程序来自动化构建过程。它有一个基本的WinForms UI。但是,自从我们转向WPF之后,我将其更改为WPF UI,同时保留了WinForms UI,这得益于Model-View-Presenter。对于那些不熟悉Model-View-Presenter的人来说,这是一个他们可以参考的易于理解的例子。

同样,找一些小的东西,你可以向他们展示非DataSet应用程序的外观,而无需进行重大的开发投资。

相关问题