DBC(契约式设计)和AOP(面向切面编程)

发布于 2024-11-02 15:13:38 字数 195 浏览 5 评论 0原文

我正在阅读《The Pragmatic Programer》,其中有关 DBC 的部分讨论了 Effel 如何强制执行 DBC 前后条件,而 Java、C#、C++ 则不然。 我首先想到的是使用 AOP(所以我用 google 搜索 DBC 和 AOP,只出现了旧链接)

那么其他程序对于在 Java 或 C# 中使用 AOP 强制执行 DBC 有哪些想法呢?

I was reading The Pragmatic Programer and by section about DBC ther talk abount how Effel enforces DBC pre and post Condition and Java,C#,C++ dose not.
First thing that came to mind was use AOP (so i googles it DBC and AOP only old links came up)

So what are other programes thoughts abount using AOP to inforce DBC in Java or C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

人事已非 2024-11-09 15:13:38

虽然我喜欢 DBC 的想法,但在我看来,AOP 并不是完成这项任务的错误武器。

方面需要特殊的基础设施,使构建过程变得复杂。

方面执行合约需要在生产代码中运行,这可能会带来实际引入错误而不是阻止错误的风险。

方面不提供任何编译时安全性,这实际上是 DBC 的主要目标。

不了解 C#,但在 Java 领域似乎没有成熟的 DBC 选项。因此我倾向于将合同作为测试来实施。虽然没有我应该的那么频繁

While I like the DBC idea, AOP is the wrong weapon for this task in my opinion.

Aspects need special infrastructure complicating your build process

Aspects enforcing contracts need to run in production code, with the risk of actually introducing bugs instead of preventing them.

Aspects do not provide any compile time security, which is really the main aim of DBC.

Don't know about C# but ther doesn't seem to be a mature DBC option available in java land. Therefore I tend to implement contracts as tests. Although not as often as I should

情仇皆在手 2024-11-09 15:13:38

C#(实际上是 .NET)使用代码契约框架和工具支持 DBC。

它提供了一个 API,用于声明前置条件、后置条件和不变条件,并且能够执行运行时检查、静态检查和生成文档。

该框架内置于 .NET Framework 4 中。

C# (actually .NET) supports DBC using the Code Contracts framework and tooling.

It provides an API for declaring your pre-, post- and invariant conditions, plus the ability to perform runtime checks, static checks and generate documentation.

The framework is built-in into .NET framework 4.

多情癖 2024-11-09 15:13:38

查看 Contract4j,它使用 AspectJ 来强制 DBC。

Look at Contract4j which uses AspectJ to inforce DBC.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文