代码之家  ›  专栏  ›  技术社区  ›  asyncwait

领域语言:什么是最好的表达方式?

  •  2
  • asyncwait  · 技术社区  · 15 年前

    我的一个客户给我发了一份需求文档,当我阅读该文档时,脑海中闪过一道闪光。我开始重写类似下面的大文档。你认为,一个自动化的工具可以通过运行这个来生成一个数据模型和规则。比方说,如果任何一个客户用这种方法来传达他们的需求,它将使每个人更好地理解域。

    我明白,既然我知道什么是博客,评论和帖子,我可以很容易地把它联系在这里。然而,如果一个人以这种方式砍掉了他们业务的所有技术条款,难道不容易让每一个条款都写在同一页上吗?

    • 模型:
      • 博客 有一个 日期
      • 博客 有一个 内容
      • 博客 有一个 作者
      • 博客 有许多 评论
      • 内容 可能有 图像
      • 内容 可能有 链接
      • 评论 有一个 博客
      • 评论 有一个 名称
      • 评论 有一个 电子邮件
      • 评论 可能有 URL
      • 评论 有一个 日期
    • 规则:
      • 博客 不能 空的
      • 博客 可能是 出版 起草
      • 博客 应该有一个 作者
      • 博客 不能 删除 什么时候 有评论
      • 博客 不能拥有 评论 之后 20天

    编辑:

    我真正想说的是——一旦你得到了一个需求文档,如果你创建了一个这里提到的文档,你就能知道客户到底在找什么。

    另外,另一个优点是您可以使用此文档进一步增强和开发项目。或者甚至一个客户也可以直接手工编辑这个文档,因为他现在已经了解了我们如何看待他的需求(我是说我们的语言)。

    在某种程度上,这种说法可以用不同的方式来解释。

    例如,我可以有一些工具来分析这些语句,并提供一些信息,比如如果有任何模型更改,规则更改都会在这个文档中进行。

    编辑:

    我目前正试图在一个复杂的模型,如订单管理,我将在这里更新我所学到的方法。同时,如果你对这里感兴趣的话,他们也可以和我联系。

    6 回复  |  直到 15 年前
        1
  •  1
  •   duffymo    15 年前

    可能是为了这些简单的案子。

    总的来说,我会说不,如果真的像这样简单的话,到现在已经完成了,编程这个职业就结束了。行政管理人员和中小企业将开发企业系统。

    我认为只要你自己编写代码生成器并彻底理解它,代码生成就可以给你一个提升。但总的来说我是怀疑的。我认为棘手的问题比你的例子复杂得多。

    您所描述的情况似乎是grails、ruby on rails或类似的微软产品的最佳选择。

        2
  •  0
  •   Juha Syrjälä    15 年前

    例如,ruby on rails提供了这种特定于领域的语言。请参阅迁移和activerecord验证。

    它为您的系统提供了一些简单的部分,但是任何复杂的东西仍然必须“手工”编码。

        3
  •  0
  •   bertolami    15 年前

    假设所有的情况都很简单,那么可以使用更高级的编程语言(如ruby或scala)将您的语言定义为内部dsl,或者使用代码生成器(如xtext、mps或yacc和bison)将其定义为外部dsl。

    然而,当结果应该是通用的、与duffymo一致的时,生成器或抽象可能会变得非常复杂。

        4
  •  0
  •   przemo_li    15 年前

    现在你走错了路。需求对于两个组(开发人员和客户机)都应该是可以理解的,并且应该有一个实例。所以当需求只改变一个时,你必须只改变一个palace/pice/information。不是几个医生。另外,任何开发人员可能不会向客户提出问题,因此他将不得不显示规范(如果应用程序是复杂的),这必须是客户规范。 (我说如果不是的话)。

    也许敏捷方法会适合。用小故事代替文档。故事应该包含一个功能。好处是程序员和客户机使用相同的语言(故事应该使用客户机域语言),客户机可以为每一种语言分配重要级别。

    PS我很舒尔,这个规格会改变:) 博客20天后不能有评论

    PSP的业务逻辑(你的规则)是复杂的远远超出你的简单例子,所以有可能随时与客户联系(没有邮件!电话或VoIP)非常重要

    你知道ORM吗?? http://en.wikipedia.org/wiki/Object-relational_mapping

        5
  •  0
  •   The0retico    15 年前

    看看行为驱动的开发,也许能给你一些关于dsl的想法。 事实上,我正在写我的硕士论文,它将结合ddd,dsls,bdd和mdsd来完成你的目标。

        6
  •  0
  •   Jacob    15 年前

    我理解您希望有一个更自动化的方法来保持需求与代码同步。UML是一个很好的建模系统的工具,并且有很多用于这种语言和类似语言的代码生成工具。然而,从那些使用过它们的人那里,我只听过恐怖故事。

    一般来说,需求文档的问题是大多数涉众并不认为系统是一组精确的、正式的规则。我总是要把高层次的需求转换成低层次的需求,以使它们对我们程序员有用,这需要大量的时间、研究、会议和一些假设。我认为我们永远无法用自动化的方式弥合这一差距。也许我们注定了,我们应该对那些被传递给我们的模糊设计文档感到高兴。