Cách mà ezyfox quản lý các bean
Dạ em chào anh, em có pull source code ezyfox server và chạy thử example hello word của anh.<p>
Em có đọc qua source code nhưng vẫn chưa hiểu hết, và có một số thắc mắc, có gì nhờ anh giúp đỡ ạ:
</p>
<p>
Em thấy trong source example của anh có ví dụ sau:
</p>
<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-s">@Setter</span>
<span class="pl-s">@EzyPrototype</span>
<span class="pl-s">@EzyObjectBinding</span>(write = false)
<span class="pl-s">@EzyRequestListener</span>(GREET)
<span class="pl-k">public</span> <span class="pl-k">class</span> GreetRequestHandler
<span class="pl-k">extends</span> ClientRequestHandler
<span class="pl-k">implements</span> EzyDataBinding {
private String who;
<span class="pl-s">@EzyAutoBind</span>
private Greeting greeting;
<span class="pl-s">@Override</span>
<span class="pl-k">protected</span> <span class="pl-k">void</span> execute() throws EzyBadRequestException {
responseFactory.newObjectResponse()
.command(GREET)
.param(<span class="pl-s">"message"</span>, greeting.greet(who))
.session(session)
.execute();
}
}
</pre>
</div>Và trước kia em thắc mắc làm sao để biết command nào để biết listen handler tương ứng. Sau khi đọc thì em thấy anh quản lý các lớp này bằng cách đưa nó vào một cái <code class="markdown-inline">singletonSet</code> ở <code class="markdown-inline">EzySimpleFactoryClass</code>. Và lúc có request gửi lên anh dựa vào command id để lấy listener tương ứng. Tuy nhiên em "KHÔNG THẤY" đoạn anh khởi tạo và add các listener này vào <code class="markdown-inline">singletonSet</code> ở <code class="markdown-inline">EzySimpleFactoryClass</code>. Em chỉ thấy đoạn get này ở <code class="markdown-inline">EzyUserRequestSingletonController</code>:<div class="markdown-block position-relative overflow-auto source-java">
<pre>
private Map<String, EzyUserRequestHandlerProxy> extractRequestHandlersFromListener() {
List<Object> clientRequestHandlers = getClientRequestHandlers();
Map<String, EzyUserRequestHandlerProxy> handlers = <span class="pl-k">new</span> HashMap<>();
<span class="pl-k">for</span> (Object handler : clientRequestHandlers) {
Class<?> handleType = handler.getClass();
EzyRequestListener annotation = handleType.getAnnotation(EzyRequestListener.class);
String command = EzyRequestListenerAnnotations.getCommand(annotation);
handlers.put(command, <span class="pl-k">new</span> EzyUserRequestHandlerProxy((EzyUserRequestHandler) handler));
logger.debug("add command {} and request handler {}", command, handler);
}
<span class="pl-k">return</span> handlers;
}
private List<Object> getClientRequestHandlers() {
<span class="pl-k">return</span> singletonFactory.getSingletons(EzyRequestListener.class);
}
</pre>
</div>và <code class="markdown-inline">getSingletons</code> ở EzySimpleSingletonFactory là anh duyệt qua <code class="markdown-inline">singletonSet</code> để tìm instance có chưa annotation <code class="markdown-inline">EzyRequestListener</code><div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-k">public</span> List getSingletons(Class... annotationClasses) {
<span class="pl-k">return</span> this.getSingletons((o) -> {
Class[] var2 = annotationClasses;
<span class="pl-k">int</span> var3 = annotationClasses.length;
<span class="pl-k">for</span>(int var4 = 0; var4 < var3; ++var4) {
Class annotationClass = var2[var4];
<span class="pl-k">if</span> (o.getClass().isAnnotationPresent(annotationClass)) {
<span class="pl-k">return</span> true;
}
}
<span class="pl-k">return</span> false;
});
}
<span class="pl-k">public</span> List getSingletons(Predicate filter) {
List list = <span class="pl-k">new</span> ArrayList();
Iterator var3 = this.singletonSet.iterator();
<span class="pl-k">while</span>(var3.hasNext()) {
Object object = var3.next();
<span class="pl-k">if</span> (filter.test(object)) {
list.add(object);
}
}
<span class="pl-k">return</span> list;
}
</pre>
</div>
Fulltext search Postgres
Chào mọi người,
<p>
</p>
<p>
Hiện em cũng đang tìm hiểu và làm thằng thằng Postgresql full textsearch. Em có thử dùng chính tính năng search của trên trang chủ. Thì em thắc mắc làm thể nào để server nó trả về được cả đoạn content "Full text search" có bôi đậm như vậy lun ạ. Hiện em chỉ mới hình dung được cách làm full text search rồi ranking trên tiêu đề + nội dung ==> trả kết quả là các bài viết có ranking cao. Còn ở đây họ trả về cả đoạn nội dung nào khớp với kết quả tìm kiếm.
</p>
<p>
</p>
<p>
Nhân tiện, mọi người cho em hỏi là postgresql có chức năng full text search rồi thì so với elastics search mình có nên dùng ko ạ?
</p>
<p>
</p>
<p>
Em cảm ơn mọi người đã giúp đỡ nhiều.
</p>
<p>
</p>
<img class="alignnone size-full wp-image-3125" src="https://stackask.com/wp-content/uploads/2021/11/Screenshot-from-2021-11-14-22-43-07.png" alt="" />
Lợi ích của việc sử dụng View trong database
Chào mọi người,
<p>
</p>
<p>
Mọi ngườ cho em hỏi là trong thực tế: Em muốn query 1 danh sách các bài viết bao gồm content + tag + cateogry + comments + reply thì mình sẽ join các bảng lại với nhau khi query như bình thường hay là tạo 1 cái view nó join sẵn.
</p>
<p>
</p>
<p>
Nhân tiện mọi người cho em hỏi việc dùng view và việc join bảng bình thường thì có ưu/ nhược điểm gì ạ
</p>
<p>
</p>
<p>
Em cảm ơn mn nhiều
</p>
Hỏi về Buffered Streams
Em có đọc về Buffered ở Java Tutorial Oracle, cũng có xài tuy nhiên cũng chưa hiểu rõ về nó lắm. Theo tài liệu thì dùng Buffered thì giảm số lần request read/write xuống disk, nhưng làm thế nào để giảm thì em ko hiểu lắm ạ.
<p>
</p>
<img class="alignnone size-full wp-image-1114" src="https://stackask.com/wp-content/uploads/2021/08/Screenshot-from-2021-08-30-10-41-22.png" alt="" />
<p>
</p>
<p>
Em cảm ơn mọi người đã đọc bài và giúp đỡ ạ.
</p>
Hạn chế Spring Data JPA và cách khắc phục
Chào mọi người,
<ol>
<li>Em hiện đang dùng spring data jpa để viết phần repository cho một ứng dụng spring (bên dưới db là mysql), thì trong một số trường hợp em muốn custom thì phải dùng thêm annotation @Query, hoặc đôi lúc em chỉ muốn check thử cặp id trong bảng trung gian many to many tồn tại không thì nó lại phải join hoặc em chỉ muốn lấy một số field từ nhiều bảng thôi nhưng lại phải lấy tất cả các filed (muốn vậy thì phải dùng projection nhưng cảm thấy query nó dài với xấu xí). Nên mọi người cho em hỏi là em định chuyển sang dùng criterial jpa để viết repository thay vì spring data jpa không biết mọi người thấy thế nào ạ?
</li>
<li>
<p>
Với lại anh chị nào đi làm rồi thì cho em hỏi là ở cty mọi người thì phần repository, phần query thì dùng thư viện gì để viết, ...
</p>
</li>
<li>
<p>
Thường mapping từ DTO -> Response, ... thì mọi người thường tự viết hay là dùng thư viện ạ (hiện em dùng modelmapper)
</p>
</li>
<p>
Link github project em đang tự viết ạ, mọi người rảnh thì ghé xem góp ý giúp em ạ. Mọi góp ý của mọi nguời em xin nhận hết ạ. --> <a href="https://github.com/hovanvydut/SBlog-BE">https://github.com/hovanvydut/SBlog-BE</a>
</p>
<p>
</p>
<p>
Em xin cảm ơn mọi người đã đọc post hoặc comment giúp đỡ ạ.
</p>
Comment, Reply, Notification Database Design
Tình cờ là em cũng đang tự làm một pet project (một blog cho phép mọi người đăng bài) trước khi biết đến stackask, và em cũng đang làm tính năng comment, reply, notification. Thì hình dứoi đây là ảnh em thiết kế database hiện tại.
<p>
</p>
<p>
Em làm 2 table là comment/reply là để lúc em load thì chỉ load comment và số reply, và chỉ load reply khi người dùng chọn "show more reply" thì mới load các reply của comment đấy. Nhưng chia 2 bảng như này thì em lại phải làm 2 bảng vote cho comment và reply. Ngoài ra em cũng làm bảng notification như vậy, khi mà có ngừoi reply, comment, up/down vote comment/reply thì insert vào bảng notification. Mọi người cho em góp ý table như vậy được chưa ạ?
</p>
<p>
</p>
<p>
Và em thắc mắc xíu là trang stackask của mình hình như phần notification nó realtime ạ, em thấy ko cần load trang mà nó vẫn show noti mới cho mình. Không biết bên dưới nó dùng gì ạ?
</p>
<p>
</p>
<p>
</p>
<p>
</p>
<p>
Em cảm ơn mọi ngừoi đã đọc post ạ.
</p>
<p>
</p>
<img class="alignnone size-full wp-image-652" src="https://stackask.com/wp-content/uploads/2021/08/image_2021-08-07_103623.png" alt="" />
Nên học java như thế nào để sau này có thể build 1 lib như ezyfox-server
Các anh/chị cho em hỏi là làm sao để mình có thể tự viết một con thư viện, mặc dù em đọc các sách về design pattern, cũng search cách để tự build thư viện nhưng vẫn không có kết quả. Em đọc source thấy code của các lib java hay, họ apply các pattern vào, rồi tạo class interface, class mà nhìn magic lun :((. Anh chị cho em hỏi em nên học java như nào, rồi cần học thêm, làm thêm những gì để có thể tự xây cho mình những thư viện riêng
<p>
</p>
<p>
Em cảm ơn mọi người đã đọc bài post ạ.
</p>