<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">• Mode-view-controller (MVC) (For interactive processing)<br></blockquote><div><br></div><div>Biojava focuses mostly on providing models. However, the biojava-structure-gui package has some visualization tools using Swing. As a library, it's important for BioJava to have strong encapsulation between the MVC components, since downstream users might be using a different visualization package. There are a few places where MVC encapsulation is poor, but these are important issues to fix (e.g. <a href="https://github.com/biojava/biojava/issues/396">#396</a>)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
• Pipes and filters (or data flow) (For batch processing) - I think you follow this one!<br></blockquote><div><br></div><div>BioJava 4 provided this through IO streams for parsers and writers. With the move to Java 8, many of the newer APIs in BioJava 5 will support java.util.stream, which provides filtering and parallelization explicitly. BioJava is also compatible with Apache Spark, which enables scaling map/reduce style processing across clusters.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
• Layered architecture (For complex systems with functionalities at different levels of abstraction)<br></blockquote><div><br></div><div>Supported to some extent by the modular architecture of BioJava. BioJava is designed to function as a library, so you could view it as a data modelling layer embedded in some larger application by downstream users.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
• Repositories (data centric) (For accessing & manipulating shared data by multiple subsystems)<br></blockquote><div><br></div><div>One of the core goals of Biojava is to provide access to popular webservices (e.g. NCBI, EMBL, PDB).</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
• Client-server and N-tier systems (For accessing shared data and resources from multiple locations)<br></blockquote><div><br></div><div>This is more provided by downstream systems. For instance, the RCSB has used a client-server setup for large-scale structural alignments. The clients perform alignments using biojava, and then report results back to a central server for aggregation (<a href="https://doi.org/10.1093/bioinformatics/btq572">Prlic et al (2010) Bioinformatics. 26(23): 2983-2985</a>).</div><div><br></div><div><br></div><div>-Spencer</div></div></div></div>