当您需要的只是Read时,您应该为CRUD使用什么类型的模式

时间:2017-08-06 22:36:47

标签: java design-patterns architecture

我最近被要求在编码面试中编写一个简单的Java控制台应用程序来执行某些文件io并显示数据。我打算带着DAO去城里,但由于我从不操纵读数的数据,所以DAO的整个想法似乎有些过分。

当您不需要时,任何人都知道一种干净的方式来确保分离关注而不会影响完整的CRUD吗?

4 个答案:

答案 0 :(得分:1)

Martin Fowler的表网关模式explained here怎么样?只需包含查找(读取)方法并错过创建,插入和更新。

答案 1 :(得分:1)

看起来像标准的MVC模式。您的控制台是视图,读取文件的代码是控制器,捕获文件行或整个文件内容的代码是您的模型。 您可以进一步将其简化为View和Model,其中model将封装文件读取并将其内容包装到Java类中。

答案 2 :(得分:0)

您可以简单地参考命令/查询模式,其中命令是单独执行创建更新和删除操作的命令,而查询是为只读目的引入的。

因此你实现了你需要的东西并离开了其他人

答案 3 :(得分:0)

这个问题是在采访中所以没有太多时间进行详细设计,作为上述问题的最低要求,以下结构将提供灵活性。可以根据要求填写详细信息。

public interface IODevice {
    String read();
    void write(String data);
}

class FileIO implements IODevice {
    @Override
    public String read() {
        return null;
    }
    @Override
    public void write(String data) {
        //...;
    }
}

class ConsoleIO implements IODevice {
    @Override
    public String read() {
        return null;
    }
    @Override
    public void write(String data) {
        //... null;
    }
}
public class DataConverter {
    public static void main(String[] args) {
        FileIO fData1 = null;// ... appropriately obtained instance;
        FileIO fData2 = null;// ... appropriately obtained instance;
        ConsoleIO cData = null;// ... appropriately obtained instance;

        cData.write(fData2.read());
        fData1.write(cData.read());
    }
}

客户端类仅使用设备的API。这将保留扩展接口的选项以实现新的设备包装器(例如xml,stream等)