【问题标题】:Is it possible to further embed best practices into programming languages?是否有可能进一步将最佳实践嵌入到编程语言中?
【发布时间】:2010-09-10 09:46:15
【问题描述】:

例如,在 c# 中,访问修饰符默认实现信息隐藏(通过默认情况下为类和字段提供最严格的访问权限)。
在 ASP.NET 中,您将 app_code 和 app_data 作为库“内置”在您的网站中。
ASP.NET MVC 又迈出了一步,“让”你使用 MVC。
我不知道它在不同的语言中如何。

您认为单一职责、强凝聚力、关注点分离等概念可以进一步嵌入到编程语言和技术中吗?

编辑:也许我应该问-“你能想出一种方法让编程语言和框架嵌入这些概念吗?”

我问有两个原因 - 首先是好奇心。其次,我认为这个问题的答案可以为如何实现这些概念制定“经验法则”。

谢谢。

【问题讨论】:

  • 将 C# 与 ASP.NET 和 ASP.NET MVC 一起列出有点像篮子里既有苹果又有橘子。如果 ASP.NET MVC 没有让你使用 MVC,它就没有任何用途。
  • 我意识到编程语言和框架之间的区别。我的问题是关于两者的。我在问是否有一种方法,有点像 ASP.NET MVC 试图完成的嵌入最佳实践..

标签: oop


【解决方案1】:

我相信答案是否定的,因为好的设计和工程决策通常不能用纯技术手段代替

然而,要告诉技术在多大程度上可以推动程序员走向、促进甚至强制执行良好的设计更加困难。我怀疑这里的答案取决于您正在查看的“最佳实践”。有些最佳实践可以通过语言规则更好地执行:

例如,组合和聚合应该优先于继承这一常见概念。 OO 语言可以通过多种方式强制执行此操作,包括:

  • 完全禁止继承;

  • 禁止一定深度的类层次结构(例如,您不能从已经是派生类的类派生,因此只允许深一层继承);

  • 禁止继承,但仍允许实现接口。

(如果您对上面的列表感到疑惑,我并没有发疯:这个列表是假设的,我并不是建议实际采取任何这些措施。这些选项中的每一个都有其明显的缺点。)

其他常见的最佳实践——事实上我怀疑最有用的最佳实践——例如 DRY(不要重复自己)、SRP(单一责任原则)等,可能无法由该语言强制执行。

【讨论】:

    【解决方案2】:

    您认为单一职责、强凝聚力、关注点分离等概念可以进一步嵌入到编程语言和技术中吗?

    没有。只有人的大脑才能解决这个问题。

    【讨论】:

      【解决方案3】:

      就像我常说的那样:“语言只能给你指路,走下去应该是你的选择”

      这就是你作为程序员的技能可以发挥作用的地方。

      【讨论】:

        【解决方案4】:

        您认为单一职责、强凝聚力、关注点分离等概念可以进一步嵌入到编程语言和技术中吗?

        Eiffel programming language 是专门围绕这些更一般的概念设计的编程语言的一个很好的例子。

        【讨论】:

          【解决方案5】:

          我记得我是通过与顾问共用一个办公室来开始工作的。我记得他打电话给一个朋友,问他“你能解释一下 Windows 是如何创建进程的吗?这里说它也创建了一个线程,这与 UNIX 有何不同?”他喜欢“最佳实践”之类的词。

          最好远离强制执行它们的语言。

          【讨论】:

          • 即使是这样,也有一些方法可以“鼓励”最佳实践,例如我在问题中给出的默认访问修饰符示例。
          【解决方案6】:

          鼓励 -> 是的。

          强迫它->不。

          我在 RoR 和 asp.net mvc 中看到了几个非常糟糕的资源。

          【讨论】:

            【解决方案7】:

            除了帮助您完成工作之外,它几乎适用于所有框架。检查Ruby on RailsDjangoJava EE 做了什么,你就会明白我想说什么。

            您可能会发现它在以动态语言编写的框架中更频繁地实现,因为它们允许通过编写 DLS 轻松扩展语言。

            【讨论】:

              猜你喜欢
              • 2011-08-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-28
              • 2010-09-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多