我坚持在spring应用程序中找出服务层的良好命名约定.对于服务层中的每个类,我首先编写它应该实现的接口,然后编写实际的类.例如,我有以下界面:
public interface UserAccountManager{
public void registerUser(UserAccount newUserAccount);
public void resetPassword(UserAccount userAccount);
...
}
Run Code Online (Sandbox Code Playgroud)
然后是实施类......
这里有什么问题,UserAccountManager是一个很好的实现类名称,所以我不得不给它一个愚蠢的名字,如SimpleUserAccountManager或UserAccountDbManager.你到目前为止使用了哪些约定?将实现类放在不同的包中并给它们与接口相同的名称是一个好主意吗?您还有什么想法使用以Manager结尾的名称而不是以Service结尾的名称?
这更像是一个我想分享的问题而不是一个问题:当打印时toString(),Java将检测Collection中的直接循环(Collection指的是其自身),而不是间接循环(其中Collection指的是另一个指向第一个 - 或更多步骤).
import java.util.*;
public class ShonkyCycle {
static public void main(String[] args) {
List a = new LinkedList();
a.add(a); // direct cycle
System.out.println(a); // works: [(this Collection)]
List b = new LinkedList();
a.add(b);
b.add(a); // indirect cycle
System.out.println(a); // shonky: causes infinite loop!
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是一个真正的问题,因为它发生在调试代码中以打印出Collection(当它遇到直接循环时我感到很惊讶,所以我错误地认为他们已经实现了一般的检查).有一个问题:为什么?
我能想到的解释是,检查一个引用自身的集合是非常便宜的,因为你只需要存储集合(你已经存在),但是对于更长的周期,你需要存储所有的集合你遭遇,从根开始.此外,您可能无法确切地回答什么的根,所以你必须存储在系统中的每个集合-你无论如何做-但你也不得不做的每集合元素的哈希查找.对于相对罕见的周期(在大多数编程中),这是非常昂贵的.(我认为)它检查直接循环的唯一原因是因为它如此便宜(一个参考比较).
好的...我有点回答了我自己的问题 - 但是我错过了什么重要的事吗?有人想要添加任何东西吗?
澄清:我现在意识到我看到的问题特定于打印 Collection(即toString()方法).循环本身没有问题(我自己使用它们并需要它们); 问题是Java无法打印它们.编辑 Andrzej Doyle指出它不仅仅是集合,而是任何toString被称为的对象.
鉴于它受此方法的限制,这里有一个检查它的算法:
toString()被调用的对象(为了确定这一点,你需要保持关于toString当前是否正在进行的状态;所以这很不方便).
此方法还可以正确呈现multirefs(一个多次引用的节点).
内存成本是IdentityHashMap(每个对象一个引用和索引); 复杂性成本是有向图中每个节点(即每个打印的对象)的哈希查找.
我正在进行MS SQL Server全文搜索查询.我需要转义特殊字符,以便我可以搜索包含特殊字符的特定术语.是否有内置函数来转义全文搜索字符串?如果没有,你会怎么做?
我有一个jquery脚本,它将click事件附加到每个链接,在单击链接时运行一个动作.这一直很有效,但我得到了一些反对意见,这些反馈正在挫败我.
用户右键单击链接并在新选项卡中打开它.当她这样做时,jquery没有捕获点击.坏用户.我用cmd-click再现了这个.
有没有办法捕捉这些手势,或者这是一个固有的限制?
我想在c#中使用webclient下载文件.
文件位置的远程端口是20114.如何告诉webclient使用20114端口?
我有一个为非政府组织开发网站的项目.我有一个疑问:网站已经处理了很多漏洞并且页面很少.这个网站是用Php制作的,他们希望我让它更安全.所以我想使用Microsoft .NET Framework制作这个网站.如果我从头开始创建这个网站,然后想要将它托管在目前他们拥有的同一个网址上,那么我是否有可能改变整个网站并将其设置在不同的平台上.
请帮忙.谢谢
在Java中,我有一个名为Operation的抽象类,以及三个名为OperationActivation,OperationPayment和OperationSendEmail的子类.
添加自评论:操作*对象是EJB实体Bean,因此我不能在其中包含业务逻辑.
不,我想创建这样的处理器类:
public class ProcessOperationService {
public void processOperation(Operation operation) {
out.println("process Operation");
process(operation);
}
public void process(OperationActivation operationActivation) {
out.println("process Activation");
}
public void process(OperationPayment operationPayment) {
out.println("process Payment");
}
public void process(OperationSendEmail operationSendEmail) {
out.println("process OperationSendEmail");
}
Run Code Online (Sandbox Code Playgroud)
}
处理每个操作需要不同的逻辑,所以我想有三种不同的方法,每个操作一个.
当然这段代码不能编译.我错过了什么或不能这样做吗?
我已经用数据库开发解决方案超过11年了,似乎我已经"开发"关于在我的表中命名列的一个相当有争议的意见:我总是给它们一个3或4个字符类型的前缀,即intGroupID, nvcTitle,dtmCreated,bitPlayerHater等.我和其他几位开发人员一起工作,他们都绝对鄙视老派的前缀约定.
(是的,我知道,我在这里没有发明任何东西,我只是拒绝放弃:)
我的主要原因是当他们试图了解数据结构时,尽可能多地向我的开发人员提供信息.立即了解列的类型可以为您(或至少我)提供一个更好的心理形象,让您了解所处理的内容.与C#或VB.NET相比,在编写查询时,通常不会从IDE获得相同的智能感知支持.
到目前为止,没有人能够提出可以改变我对这一特定主题的看法的杀手论点.我还有其他几个同样有争议的命名约定,它们提高了清晰度,但列前缀似乎让更多的人感到沮丧.
为什么前缀数据库列被认为是一种不好的做法?
我正在做一个https帖子,我得到ssl异常的例外不可信服务器证书.如果我做正常的http它工作得很好.我必须以某种方式接受服务器证书吗?
java ×4
.net ×1
android ×1
asp.net ×1
c ×1
c# ×1
collections ×1
cycle ×1
javascript ×1
jquery ×1
migration ×1
php ×1
polymorphism ×1
port ×1
prefix ×1
security ×1
spring ×1
spring-mvc ×1
sql-server ×1
ssl ×1
webclient ×1