Good time of day (again!), I know Paul is going to be talking about the Koha:: namespace tomorrow, but since I can't be in KohaCon in person I wanted to share a few of my thoughts and maybe help him out with getting the conversation started. As part of the authority control improvements I'll be working on, I'm going to be doing a fair amount of code cleanup, which in many cases will involve moving the non-offending parts of the code to the Koha:: namespace (I don't know if this is an American expression, but there's a saying that you can't make a silk purse out of a sow's ear, which pretty much sums up how parts of C4:: are). On the plane on the way back from Lawrence I jotted down a few notes on how parts of the Koha:: namespace might look, and wanted to share them. I'm not sure if the ASCII graphics will come through in the e-mail, but this is also at the end of the authority control improvements RFC at http://wiki.koha-community.org/wiki/C_%26_P_Authority_Control_Improvements_R... Any suggestions how to improve things (or, even better, consensus!) would be most welcome. + Koha::Cache - object-oriented class for caching data in Koha | +--- Koha::Cache::Fastmmap - mmap driver class for Koha caching | (implemented in bug 8092) | +--- Koha::Cache::Memcached - memcached driver class for Koha caching | (implemented by bug 7248) | +--- Koha::Cache::Memory - in-process driver class for Koha caching | (implemented in bug 8092) | +--- Koha::Cache::Memory - in-process driver class for Koha caching (implemented in bug 8092) + Koha::Calendar - object-oriented class for handling branch opening calendars & Koha::Context - exporter class for basic configuration information (note: a better option might be Koha::Koha as an object-oriented alternative to Koha::Context; C & P will implement the start of the latter, if that is the consensus of the community) & Koha::DateUtils - exporter shim class to ease migration to DateTime from date-only strings # Koha::Filter - virtual parent class for all record processor filters | +--* Koha::Filter::[metadata schema]::* - | object-oriented classes extending Koha::RecordProcessor::Base | which implement particular record processing functionalities \ +--- Koha::Filter::MARC::EmbedItems - filter for embedding items in | bib records for the indexing process | +--- Koha::Filter::MARC::EmbedSeeFromHeadings - filter for embedding see from headings in bib records for the indexing process + Koha::Heading - object-oriented class representing | authority-controlled headings | +--- Koha::Heading::MARC21 - object-oriented MARC21 heading handler for | Koha::Heading | +--- Koha::Heading::UNIMARC - object-oriented UNIMARC heading handler for Koha::Heading + Koha::Indexer::Utils - indexer utility functions (implemented by bug 7818) # Koha::Linker - virtual parent class for heading-authority linker | modules | +--* Koha::Linker::* - object-oriented linker modules for linking | headings to authorities \ +--- Koha::Linker::Default - default linker module | +--- Koha::Linker::FirstMatch - linker module that always selects | the first match it finds | +--- Koha::Linker::LastMatch - linker module that always selects the last match it finds # Koha::Record - virtual parent class for all types of records handled | by Koha | +--- Koha::Record::Biblio - object-oriented class representing | bibliographic records | +--+ Koha::Record::Authority - object-oriented class representing | | authority records | | | &--- Koha::Record::Authority::Handler::MARC21 - exporter class | | with MARC21-specific routines for Koha::Record::Authority | | (should be used only by Koha::Record::Authority) | | | &--- Koha::Record::Authority::Handler::UNIMARC - exporter class | with UNIMARC-specific routines for Koha::Record::Authority | (should be used only by Koha::Record::Authority) | +--* Koha::Record::Holdings - hypothetical object-oriented class | representing holdings records | +--- Koha::Record::Item - object-oriented class representing item records + Koha::RecordProcessor - object-oriented class for processing records using various filters & Koha::Search - exporter class offering access to searching | functionality via Koha::Search::Engine | +--+ Koha::Search::Engine - object-oriented class which dispatches | | calls into the specific search engine module | | | +--- Koha::Search::Engine::Solr - class which interfaces with solr | | for searching | | | +--- Koha::Search::Engine::Zebra - class which interfaces with Zebra | for searching | +--# Koha::Search::Plugin - virtual parent class for search plugins | | | +--- Koha::Search::Plugin::* - plugins implementing particular search | functionality | +--+ Koha::Search::Query - object-oriented class which generates queries | +--- Koha::Search::Query::Solr - class to generate Solr queries | +--- Koha::Search::Query::Zebra - class to generate Zebra queries + Koha::Template::Plugin::* - plugins for Template Toolkit & Koha::Utils - exporter class for utility functions required by many | parts of Koha (no dependencies other than Koha::Context) | &--- Koha::Utils::Authorities - exporter class for utility functions | related to authorities that do not act on an individual authority | &--- Koha::Utils::Biblios - exporter class for utility functions related to bibliographic records that do not act on an individual biblio Legend: + indicates an object-oriented class (or classes, in some cases) +--- indicates an object-oriented class that is further down in the hierarchy (may or may not be a subclass) +--+ indicates an object-oriented subclass that is extended # indicates a virtual object-oriented parent class +--# indicates a virtual object-oriented parent class which is further down in the hierarchy & indicates an exporter class &--- indicates an exporter subclass * indicates a hypothetical or example class \ indicates that the class(es) below this symbol provide (a) specific example(s) of the hypothetical or example class above the symbol NOTE: I do not propose to implement all of this as part of the authority project. C & P's authority development will create the following classes in the Koha:: namespace: + Koha::Filter + Koha::Filter::MARC::EmbedSeeFromHeadings + Koha::Heading::* + Koha::Record::Authority::* + Koha::RecordProcessor + Koha::Utils::Authorities (possibly) Regards, Jared -- Jared Camins-Esakov Bibliographer, C & P Bibliography Services, LLC (phone) +1 (917) 727-3445 (e-mail) jcamins@cpbibliography.com (web) http://www.cpbibliography.com/
I've written up our brainstorming session and put it on the wiki here: http://wiki.koha-community.org/wiki/Koha_Namespace_RFC It is a bit difficult to put these ideas down in plain text, so I apologize if it is not very clear. Kyle http://www.kylehall.info ByWater Solutions ( http://bywatersolutions.com ) Meadville Public Library ( http://www.meadvillelibrary.org ) Crawford County Federated Library System ( http://www.ccfls.org ) Mill Run Technology Solutions ( http://millruntech.com ) On Sat, Jun 9, 2012 at 12:58 PM, Jared Camins-Esakov <jcamins@cpbibliography.com> wrote:
Good time of day (again!),
I know Paul is going to be talking about the Koha:: namespace tomorrow, but since I can't be in KohaCon in person I wanted to share a few of my thoughts and maybe help him out with getting the conversation started. As part of the authority control improvements I'll be working on, I'm going to be doing a fair amount of code cleanup, which in many cases will involve moving the non-offending parts of the code to the Koha:: namespace (I don't know if this is an American expression, but there's a saying that you can't make a silk purse out of a sow's ear, which pretty much sums up how parts of C4:: are). On the plane on the way back from Lawrence I jotted down a few notes on how parts of the Koha:: namespace might look, and wanted to share them. I'm not sure if the ASCII graphics will come through in the e-mail, but this is also at the end of the authority control improvements RFC at http://wiki.koha-community.org/wiki/C_%26_P_Authority_Control_Improvements_R...
Any suggestions how to improve things (or, even better, consensus!) would be most welcome.
+ Koha::Cache - object-oriented class for caching data in Koha | +--- Koha::Cache::Fastmmap - mmap driver class for Koha caching | (implemented in bug 8092) | +--- Koha::Cache::Memcached - memcached driver class for Koha caching | (implemented by bug 7248) | +--- Koha::Cache::Memory - in-process driver class for Koha caching | (implemented in bug 8092) | +--- Koha::Cache::Memory - in-process driver class for Koha caching (implemented in bug 8092)
+ Koha::Calendar - object-oriented class for handling branch opening calendars
& Koha::Context - exporter class for basic configuration information (note: a better option might be Koha::Koha as an object-oriented alternative to Koha::Context; C & P will implement the start of the latter, if that is the consensus of the community)
& Koha::DateUtils - exporter shim class to ease migration to DateTime from date-only strings
# Koha::Filter - virtual parent class for all record processor filters | +--* Koha::Filter::[metadata schema]::* - | object-oriented classes extending Koha::RecordProcessor::Base | which implement particular record processing functionalities \ +--- Koha::Filter::MARC::EmbedItems - filter for embedding items in | bib records for the indexing process | +--- Koha::Filter::MARC::EmbedSeeFromHeadings - filter for embedding see from headings in bib records for the indexing process
+ Koha::Heading - object-oriented class representing | authority-controlled headings | +--- Koha::Heading::MARC21 - object-oriented MARC21 heading handler for | Koha::Heading | +--- Koha::Heading::UNIMARC - object-oriented UNIMARC heading handler for Koha::Heading
+ Koha::Indexer::Utils - indexer utility functions (implemented by bug 7818)
# Koha::Linker - virtual parent class for heading-authority linker | modules | +--* Koha::Linker::* - object-oriented linker modules for linking | headings to authorities \ +--- Koha::Linker::Default - default linker module | +--- Koha::Linker::FirstMatch - linker module that always selects | the first match it finds | +--- Koha::Linker::LastMatch - linker module that always selects the last match it finds
# Koha::Record - virtual parent class for all types of records handled | by Koha | +--- Koha::Record::Biblio - object-oriented class representing | bibliographic records | +--+ Koha::Record::Authority - object-oriented class representing | | authority records | | | &--- Koha::Record::Authority::Handler::MARC21 - exporter class | | with MARC21-specific routines for Koha::Record::Authority | | (should be used only by Koha::Record::Authority) | | | &--- Koha::Record::Authority::Handler::UNIMARC - exporter class | with UNIMARC-specific routines for Koha::Record::Authority | (should be used only by Koha::Record::Authority) | +--* Koha::Record::Holdings - hypothetical object-oriented class | representing holdings records | +--- Koha::Record::Item - object-oriented class representing item records
+ Koha::RecordProcessor - object-oriented class for processing records using various filters
& Koha::Search - exporter class offering access to searching | functionality via Koha::Search::Engine | +--+ Koha::Search::Engine - object-oriented class which dispatches | | calls into the specific search engine module | | | +--- Koha::Search::Engine::Solr - class which interfaces with solr | | for searching | | | +--- Koha::Search::Engine::Zebra - class which interfaces with Zebra | for searching | +--# Koha::Search::Plugin - virtual parent class for search plugins | | | +--- Koha::Search::Plugin::* - plugins implementing particular search | functionality | +--+ Koha::Search::Query - object-oriented class which generates queries | +--- Koha::Search::Query::Solr - class to generate Solr queries | +--- Koha::Search::Query::Zebra - class to generate Zebra queries
+ Koha::Template::Plugin::* - plugins for Template Toolkit
& Koha::Utils - exporter class for utility functions required by many | parts of Koha (no dependencies other than Koha::Context) | &--- Koha::Utils::Authorities - exporter class for utility functions | related to authorities that do not act on an individual authority | &--- Koha::Utils::Biblios - exporter class for utility functions related to bibliographic records that do not act on an individual biblio
Legend: + indicates an object-oriented class (or classes, in some cases) +--- indicates an object-oriented class that is further down in the hierarchy (may or may not be a subclass) +--+ indicates an object-oriented subclass that is extended # indicates a virtual object-oriented parent class +--# indicates a virtual object-oriented parent class which is further down in the hierarchy & indicates an exporter class &--- indicates an exporter subclass * indicates a hypothetical or example class \ indicates that the class(es) below this symbol provide (a) specific example(s) of the hypothetical or example class above the symbol
NOTE: I do not propose to implement all of this as part of the authority project. C & P's authority development will create the following classes in the Koha:: namespace: + Koha::Filter + Koha::Filter::MARC::EmbedSeeFromHeadings + Koha::Heading::* + Koha::Record::Authority::* + Koha::RecordProcessor + Koha::Utils::Authorities (possibly)
Regards, Jared
-- Jared Camins-Esakov Bibliographer, C & P Bibliography Services, LLC (phone) +1 (917) 727-3445 (e-mail) jcamins@cpbibliography.com (web) http://www.cpbibliography.com/
_______________________________________________ Koha-devel mailing list Koha-devel@lists.koha-community.org http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/
Kyle, The writeup made perfect sense to me, and all of that sounds like a good idea, with one exception: there is nothing about business logic being object-oriented. Whenever possible, business logic code should be object-oriented too. At least, that's my thought. Regards, Jared On Sun, Jun 10, 2012 at 3:41 PM, Kyle Hall <kyle.m.hall@gmail.com> wrote:
I've written up our brainstorming session and put it on the wiki here: http://wiki.koha-community.org/wiki/Koha_Namespace_RFC It is a bit difficult to put these ideas down in plain text, so I apologize if it is not very clear.
Kyle
http://www.kylehall.info ByWater Solutions ( http://bywatersolutions.com ) Meadville Public Library ( http://www.meadvillelibrary.org ) Crawford County Federated Library System ( http://www.ccfls.org ) Mill Run Technology Solutions ( http://millruntech.com )
-- Jared Camins-Esakov Bibliographer, C & P Bibliography Services, LLC (phone) +1 (917) 727-3445 (e-mail) jcamins@cpbibliography.com (web) http://www.cpbibliography.com/
I agree, but the existing rules for the Koha namespace ( what I am calling Koha::BusinessLogic here ) do not require modules to be strictly OO, though it is recommended. For that reason, it is not part of the RFC. Perhaps we will need to discuss this as well. Kyle http://www.kylehall.info ByWater Solutions ( http://bywatersolutions.com ) Meadville Public Library ( http://www.meadvillelibrary.org ) Crawford County Federated Library System ( http://www.ccfls.org ) Mill Run Technology Solutions ( http://millruntech.com ) On Sun, Jun 10, 2012 at 9:41 PM, Jared Camins-Esakov <jcamins@cpbibliography.com> wrote:
Kyle,
The writeup made perfect sense to me, and all of that sounds like a good idea, with one exception: there is nothing about business logic being object-oriented. Whenever possible, business logic code should be object-oriented too. At least, that's my thought.
Regards, Jared
On Sun, Jun 10, 2012 at 3:41 PM, Kyle Hall <kyle.m.hall@gmail.com> wrote:
I've written up our brainstorming session and put it on the wiki here: http://wiki.koha-community.org/wiki/Koha_Namespace_RFC It is a bit difficult to put these ideas down in plain text, so I apologize if it is not very clear.
Kyle
http://www.kylehall.info ByWater Solutions ( http://bywatersolutions.com ) Meadville Public Library ( http://www.meadvillelibrary.org ) Crawford County Federated Library System ( http://www.ccfls.org ) Mill Run Technology Solutions ( http://millruntech.com )
-- Jared Camins-Esakov Bibliographer, C & P Bibliography Services, LLC (phone) +1 (917) 727-3445 (e-mail) jcamins@cpbibliography.com (web) http://www.cpbibliography.com/
participants (2)
-
Jared Camins-Esakov -
Kyle Hall