我需要爲應用程序創建一個API(可以說庫管理器)。像許多典型的應用程序一樣,它是在一個ORM工具的基礎上製作的,它使得POJO被保存到dbms中。 現在我必須製作API,以便其他開發人員可以將它用作JAR。比方說,我們希望用戶添加圖書到圖書館。 我有很多關於最佳設計方法的問題。API設計和DAO模式
1)是否有類似的DAO類的POJO是一個好主意:
BookManager { create(...) delete(Book book); List<Book> getAll(); ... }
2)曝光對象:
一)我應該揭露實際應用POJO對API層? 這些有一些可能不想公開的應用程序邏輯以及我想公開的某些邏輯。例如,我想公開book.getPages()而不是book.deletePage(int pageNo)
b)專門爲API層創建重複的對象。只有界面將被暴露。
c)根本不暴露對象。 API使用參數。例如
BookManager { create(String name, int price); delete(String name); List<Pair<String, Integer>> getAll(); ... }
這意味着,與系統接入的單個點。如果某些操作要在POJO上執行,它將從BookManager中調用。例如,ClockManager.start(String clockName)。它還具有靈活性,例如在ClockManager中具有諸如startAll()的方法。 3)最後,BookManager應該包含一個update()方法,還是它應該出現在Book本身中?更新意味着將配置保存到數據庫中。什麼更有意義:
Book book = bookManager.create("API Design"); book.setPrice(); book.update();
或者,
Book book = bookManager.create("API Design"); book.setPrice(); bookManager.update(book);
在此先感謝,
阿曼
感謝保羅,這並不是真正的圖書館管理系統。我只是試圖想出一些真實世界的例子。 – amanmanocha
好吧,剛剛用你的例子來說明我的意思是由activerecord patten - load是一個靜態(C#,不知道它是什麼在Java中)方法的對象,因爲它的目的是創建一個實例,而Update方法該實例。 –
謝謝保羅,它實際上不是一個圖書館管理系統。我只是試圖想出一些真實世界的例子。
我完全同意你關於將POJO轉換爲ActiveRecord類型功能的觀點。你能解釋一下這樣一個場景,它適合擁有book.update()。我相信通過使用bookManager.update()我向用戶發出明確的信號,如果您想與API交互,請通過Manager界面。 – amanmanocha