我想在IntelliJ IDEA中有一个键盘快捷方式,它具有以下效果:项目工具窗口中的树展开以显示当前打开的类(或文件),并在树中选择此类.
这可能吗?
在尝试理解SQL语句的执行方式时,有时建议您查看解释计划.在解释(理解)解释计划时应该经历的过程是什么?应该突出的是,"哦,这真的很棒吗?" 与"哦不,那不对."
最近我公司对面向服务的体系结构(SOA)很感兴趣.每当我试图看看我们如何使用它时,我总是遇到心理障碍.粗略地:
面向对象说:"保持数据和方法一起操纵数据(业务流程)";
服务导向说:"将业务流程保留在服务中,并将数据传递给它".
以前开发SOA的尝试最终将面向对象的代码转换为数据结构和单独的操作它们的程序(服务),这似乎是一个倒退.
我的问题是:什么模式,架构,策略等允许SOA和OO一起工作?
编辑:答案说"OO for internals,SOA for system boundary"非常有用,但这并不是我所得到的.
假设您有一个Account对象,该对象具有一个名为Merge将其与另一个帐户组合在一起的业务操作.典型的面向对象方法如下所示:
Account mainAccount = database.loadAccount(mainId);
Account lesserAccount = database.loadAccount(lesserId);
mainAccount.mergeWith(lesserAccount);
mainAccount.save();
lesserAccount.delete();
Run Code Online (Sandbox Code Playgroud)
而我见过的SOA等价物看起来像这样:
Account mainAccount = accountService.loadAccount(mainId);
Account lesserAccount = accountService.loadAccount(lesserId);
accountService.merge(mainAccount, lesserAccount);
// save and delete handled by the service
Run Code Online (Sandbox Code Playgroud)
在OO情况下,业务逻辑(以及感谢ActiveRecord模式的实体感知)被烘焙到Account类中.在SOA案例中,Account对象实际上只是一个结构,因为所有业务规则都隐藏在服务中.
我可以同时拥有丰富的功能类和可重用的服务吗?
就在最近,我遇到了一个名为Application Strangler Pattern的想法.据我了解,它是大型遗留系统问题的解决方案.我们的想法是围绕旧应用程序创建一个新的应用程序.这种成本和风险远远低于完全重写系统的成本和风险.慢慢地,随着时间的推移,新应用程序将做越来越多的工作,并最终扼杀旧的遗留应用程序.与此同时,开发人员可以在一个干净的新系统中工作,效率更高,并希望能够生成更好的代码.
我现在工作的地方是新功能,即使是看似微不足道的事情,需要很长时间才能开发,有很高的破坏风险.我们坐了大约一百万行代码,单元测试覆盖率可能达到1-2%.该系统是一个使用Web服务的SOA系统(两者都不是必需的),并且在风格上比面向对象更具程序性.该系统既是web又是win,都是用.net编程语言编写的.
最后一个问题: 在考虑这个新的想法/模式时,我想知道是否有人有使用这种模式的经验,他们想分享.例如,实现它的好方法是什么(例如,连接旧应用程序中的事件)?此外,如果任何人对这个问题有任何想法,为什么它会是一个好的或坏的想法,那也是值得赞赏的.
参考文献:
当我的应用启动时,我经常调用一个性能关键的方法.最终,它被JIT编译,但是在解释器中运行了一些明显的时间之后.
有什么办法我可以告诉JVM我想从一开始就编译这个方法(没有调整其他内部的东西-XX:CompileThreshold)?
我有一个pom.xml文件(从另一个项目复制并改编),我想生成一个新项目的目录结构.哪个命令可以做到这一点?
请注意,我在网上找到了无数的例子,它解释了如何使用mvn archetype:create来创建一个pom.xml文件和目录结构,但我已经有了一个pom.xml,我想创建基于的目录在命令行上没有指定groupId,artifactId等.
mvn archetype:create-from-project似乎也创建了一个基于另一个pom.xml(?)的pom.xml,但我只想要这些目录.先感谢您!
编辑:我知道这不是一个"大问题",因为我可以手动创建目录:)我已经做了很多次了,我总觉得必须有一个更聪明的方法来做...
当我看到代码片段之类的时候
interface A {
void a();
void b() default { System.out.println("b"); };
void c() final { System.out.println("c"); };
}
Run Code Online (Sandbox Code Playgroud)
我有一个问题.我们还没有得到足够的Java?为什么有人需要这个呢?
我有一个Java应用程序,需要在不同进程之间进行通信.进程可以在相同的JVM或不同的JVM中运行,但可以在同一台机器上运行.
我的应用程序需要将"消息"提交给另一个进程(相同或不同的JVM)并忘记它.类似于IBM"MQ"之类的消息传递队列,但是简单,只使用内存,没有IO到硬盘以获得性能提升.
我不确定Performance prescriptive的最佳方法是什么.
还有其他想法吗?
我需要从存储在Oracle数据库的CLOB列中的XML中选择一些值.我能想到的最好的是以下内容:
select extract(xmltype(COLUMN), 'xpath-expression').getStringVal() as XMLVAL from TABLE t;
Run Code Online (Sandbox Code Playgroud)
问题是当XPATH选择多个节点时,值会连接在一起.我需要将每个选定的节点放在一个单独的行上.显然连接必须出现在getStringVal()中,我使用它,因为我需要在我的客户端(而不是XMLType)中有字符串.我应该使用什么而不是getStringVal()?
编辑:请注意,这里有一个类似的问题:Oracle Pl/SQL:循环遍历XMLTYPE节点 - 但我无法将其应用于我的案例.它使用两种不同的XPATH表达式,分离原则尚不清楚.
EDIT2:XML非常复杂,但基本上我需要找到"一些值"条目
<string name="SOME_KEY" value="some value"/>
Run Code Online (Sandbox Code Playgroud)
在许多其他元素下埋葬的元素.我使用XPATH //*[@name="SOME_KEY"]/@value ,它成功找到具有SOME_KEY属性的所有XML元素的value属性.
我想解决以下问题:
从集合A开始,我想将该集合(比如集合B)上的某种"视图"传递给某个方法.视图B不必包含原始集合A的所有元素.如果在此方法中将对象添加到视图(集合B)或从视图中删除,则这些更改也应反映在原始集合A上.
例如(伪代码):
开始情况:
Collection A = {1, 2, 3};
View-on-collection B = {1, 2};
Run Code Online (Sandbox Code Playgroud)方法调用:
someMethod(B) {
B.add(4);
B.remove(2);
}
Run Code Online (Sandbox Code Playgroud)结束情况:
Collection A = {1, 3, 4};
Run Code Online (Sandbox Code Playgroud)有谁知道这个问题的巧妙解决方案?