[Koha-devel] Koha Core anyone?

Brendan Gallagher info at bywatersolutions.com
Tue Apr 10 21:34:24 CEST 2018


Very excited by this idea.  Lot's to think about.  We're on board with most
of it and are ready to help.

Cheers,
Brendan

On Tue, Apr 10, 2018 at 9:30 AM, Jonathan Druart <
jonathan.druart at bugs.koha-community.org> wrote:

> Ha, found it!
> https://gitlab.deichman.no/digibib/Koha/commits/circ_rewrite_master
> I was looking at the digibib github repo!
>
>
> On Tue, 10 Apr 2018 at 13:28 Jonathan Druart <jonathan.druart at bugs.koha-
> community.org> wrote:
>
>> Hi Benjamin,
>>
>> Where is the code of the "working example"?
>>
>> Cheers,
>> Jonathan
>>
>> On Tue, 10 Apr 2018 at 12:04 Benjamin Rokseth <
>> benjamin.rokseth at deichman.no> wrote:
>>
>>> Community hackers,
>>>
>>> on hackfest I got introvertly enthusiastic about the concept of a Koha
>>> Core, and
>>> about time I shared some thoughts.
>>>
>>> Background: Deichman (Oslo Public Library) is heavily leaning on
>>> bleeding edge Koha
>>> development (REST, Objects, Auth, NCIP and such) and, like at least some
>>> others, maintain
>>> a lot of local patches to tweak Koha into our users needs. Some are
>>> probably interesting to
>>> Community, others not. Now to keep everything in sync with Community
>>> would be amazing,
>>> but not likely to happen anytime soon.
>>>
>>> Great work has been done on refactoring Koha (new namespace, Koha
>>> Objects and REST api, etc.),
>>> but we'd like to suggest one more - a Koha core.
>>> The idea is simple: borrow from object oriented languages, java, or
>>> actually more ruby, since
>>> we're dealing with a dynamic language, use class/module inheritance and
>>> method overrides.
>>> Perl has the "use parent" concept which simplifies
>>> inheritance/subclassing and allows for
>>> nested overrides.
>>>
>>> As an example we refactored the current circulation in Koha, since this
>>> for us is the core
>>> functionality that we depend on and need to hook our local quirks on top
>>> of.
>>> An attempt to illustrate:
>>>
>>> +------------+
>>> | Core::Main |
>>> +--^---------+
>>>    |
>>> +--+----------------+
>>> | Core::Prefs       |
>>> | Core::Exceptions  |                +-----------------------+
>>> | Core::Circulation <-----+------+---| Deichman::Circulation |
>>> | ...               |     |      |   +---^-------------------+
>>> +-------------------+     |      |       |
>>>                           |      |       |
>>>        +------------------+------+       +--------------------------+
>>>        | Core::Circulation::SIP  |       |Deichman::Circulation::SIP|
>>>        +------------------------------------------------------------+
>>>                                  |        use parent qw(
>>>                                  |          Deichman::Circulation
>>>           +----------------------+          Core::Circulation::SIP
>>>           | Core::Circulation::UI|        )
>>>           +----------------------+
>>>                                  |
>>>                                  ~
>>>
>>> * Core::Main is simply an empty class that act as a parent for any
>>> child, including Core::Circulation.
>>> * Core::Circulation has a constructor that takes koha objects item and
>>> library, optionally patron
>>>   and sysprefs overrides. It can have accessors such as checkout,
>>> messages and other things needed for
>>>   intra, SIP or whatever. It has methods Checkin, Checkout and Renew,
>>> amongst others.
>>> * then: Deichman::Circulation::SIP in this example is a local override
>>> that inherits from parents
>>>   Deichman::Circulation and Core::Circulation::SIP
>>>
>>> now the beauty of this is that Deichman::Circulation::SIP can override
>>> anything (even the constructor)
>>> without touching any of the core code, and perl will traverse the
>>> inheritance tree until it finds the
>>> first matching constructor and method.
>>>
>>> Pros:
>>>   - simpler, more readable and more reusable code.
>>>   - local adaptations are easy to hande, and reusable for others
>>>   - the slight overhead of using blessed objects and inheritance is
>>> easily gained by the fact that any
>>>     operation will only need fetching Koha objects once
>>> (item,library,patron etc) instead of refetching
>>>     them numerous times spread across methods calls and loops
>>>   - way less db calls if done right, faster Koha
>>>   - no more C4::Context, hopefully
>>>   - systempreferences can be dramatically reduced, since most of them
>>> are about overrides anyways
>>>   - can be done incrementally, replacing one functionality at a time
>>>
>>> cons:
>>>   - refactoring doesnt make end users happy (but needs to be done in any
>>> case)
>>>   - a bit of work to keep templates happy
>>>   - requires a basic understanding of oop
>>>
>>> So to sum up: We already have a working example for circulation (though
>>> not in production)
>>> that we can demonstrate. It reimplements basically the entire
>>> C4::Circulation, just some small
>>> parts missing. So it can be done.
>>>
>>> But we'd love to hear second opinions from the community! We know the
>>> fear for breaking changes, but
>>> its neither scary or complicated to implement!
>>>
>>> Benjamin Rokseth
>>> Oslo Public Library
>>> _______________________________________________
>>> Koha-devel mailing list
>>> Koha-devel at 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/
>>>
>>
> _______________________________________________
> Koha-devel mailing list
> Koha-devel at 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/
>



-- 
---------------------------------------------------------------------------------------------------------------
Brendan A. Gallagher
ByWater Solutions
CEO

Support and Consulting for Open Source Software
Installation, Data Migration, Training, Customization, Hosting
and Complete Support Packages
Office: Portland, OR - Office: Redding, CT
Phone # (888) 900-8944
http://bywatersolutions.com
info at bywatersolutions.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20180410/56e9f6f7/attachment-0001.html>


More information about the Koha-devel mailing list