[Koha-devel] Koha Core anyone? (Benjamin Rokseth)

Benjamin Rokseth benjamin.rokseth at deichman.no
Wed Apr 11 00:09:59 CEST 2018


Hi, and thanks for quick feedback folks.

Good catch, Jonathan, we recently moved to gitlab since they integrate devops and CI build tools. The branch circ_rewrite_master is rebased against master, but havent tested properly yet, so its very WIP but you'll get the general idea.


Julian,​

> I have some concerns about this approach. You are saying that local

> adaptations are reusable for others, but I don't see how. Deichman::*
> will inevitably end up being highly specific. I could probably
> copy/paste some code, but I think we will all have to write our own
> MyLibrary::* stuff.

Your concern is probably sound, since it is easier to add all local adaptations to a local namespace (Deichman::*) and be done with it. What I'd suggest though is that modules are kept as atomic as possible so that anything can possibly be overridden. Its kind of the opposite of todays practise where sysprefs are scattered all over the code to adjust for local variations, at least from what I've seen in the C4::Circulation. I think it would make sense to allow for a Core Circulation that never touch sysprefs, while at the same time having a "default" or "full-blown" implementation that can do exactly what C4::Circulation does today.

> I'd prefer to extend the capabilities of plugins. This way we could
> combine small generic plugins to answer specific needs.

Actually, I didnt realize plugins was more than tools to extend reports, kind of a stepwise db tooling. At least the examples I saw was just CGI templates that must be aactively run to modify database. And they seemed based on CGI templating which doesnt help us much. In any case, to plug into something central, such as Circulation, the circulation modules would need to be rewritten.

> But you also say that you reimplemented all the circulation stuff, and
> that it was not complicated, so I'm curious :) Show us the code!


WIP for sure, but as Jonathan found out, here is a single commit on top of master

https://gitlab.deichman.no/digibib/Koha/commits/circ_rewrite_master

I see now we use a local caching trick with method attributes (PureFunctions) that is not included, so I will have to remove that or it will not work at present. But if theres some interest, I will open a bug and commit so people can test it. I will try to commit at least to make circulation work as in a standard installation.


Benjamin

________________________________
Fra: Brendan Gallagher <info at bywatersolutions.com>
Sendt: 10. april 2018 21:34
Til: Jonathan Druart
Kopi: Benjamin Rokseth; koha-devel at lists.koha-community.org
Emne: Re: [Koha-devel] Koha Core anyone?

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<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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<mailto:info at bywatersolutions.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20180410/7dabe07d/attachment-0001.html>


More information about the Koha-devel mailing list