在过去的几周里,我一直在研究Java包结构和依赖模式.关于该主题的着作中的一个共同点是包依赖应该形成有向无环图(DAG)的简单规则.作者罗伯特马丁甚至正式确定了非循环依赖原则(ADP),该原则指出
包之间的依赖关系结构必须是有向无环图(DAG).也就是说,依赖结构中必须没有循环.
一些Java库确实遵循这个简单的规则.即Spring Framework库(spring-core,spring-web等)和Google Guava.
但令我惊讶的是,大多数领先的开源Java项目都没有!
以下开源项目在包之间具有循环依赖关系:
我误解了软件工程原理吗?或者开发商是否对此包装组织技术打折?
给定两个可复制元素的向量和对这些项目的谓词,什么是有效且惯用的方法:
以下代码段反映了我目前的想法,但它确实需要两次遍历源向量。
vector<int> source{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
vector<int> target;
auto predicate = [](int n) { return n % 2 == 0; };
std::for_each(source.begin(), source.end(), [&predicate, &target](int n) {
if (predicate(n)) {
target.push_back(n);
}
});
auto it = std::remove_if(source.begin(), source.end(), predicate);
source.erase(it, source.end());
Run Code Online (Sandbox Code Playgroud)