如何命名包含接口的此单类依赖项反转包

时间:2015-11-20 14:04:57

标签: java oop naming-conventions packages

我正在阅读https://books.google.bg/books/about/Agile_Software_Development.html?id=0HYhAQAAIAAJ&hl=en,其中有一章介绍了包,如何将课程分组,如何保持凝聚力,稳定性,责任感,独立性等。

在我的应用程序中,我希望将JSON转换器保留在架构的外围。我想要一个接口类,如下所示:

public interface JsonConverter {

    InputStream fromJsonObject(JSONObject jsonObject);
    InputStream fromJsonArray(JSONArray jsonArray);
    JSONObject toJsonObject(OutputStream outputStream);
    JSONArray toJsonArray(OutputStream outputStream);

}

我想要另一个包来包含这个接口的实现 - 我可以轻松换掉一些不同的库。

以下是本书中的一张图片,解释了这一点:

enter image description here

以下是技术解释的图片:

enter image description here

我的问题如下:如何命名包含接口和json转换器库包的包?

首先,我讨厌匈牙利语,所以我不想把它称为以I开头的东西。其次,我想不出一个不包含多个单词的名字,我不知道是否应该使用camelCase或单词之间的点或无。

我可以命名包裹:

my.app.json.interface
my.app.json.converter

编辑:看起来我不能将interface用作包名的一部分,所以我仍然不知道如何命名我的包

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

public interface Converter<X,Y> {

    InputStream fromObject(X object);

    InputStream fromArray(Y array);

    X toObject(OutputStream outputStream);

    Y toArray(OutputStream outputStream);
}

public class JsonConverter implements Converter<JSONObject,JSONArray> {

    @Override
    public InputStream fromObject(JSONObject object) {
        return null;
    }

    @Override
    public InputStream fromArray(JSONArray array) {
        return null;
    }

    @Override
    public JSONObject toObject(OutputStream outputStream) {
        return null;
    }

    @Override
    public JSONArray toArray(OutputStream outputStream) {
        return null;
    }

}

您抽象出界面的原因是您可以稍后用其他内容替换它。因此,您必须将所有JSON内容移动到实现中,并将所有可调用内容移动到界面中。泛型是一种简洁的参数化结果,以保持类型安全。