Github user bzz commented on the issue:

    https://github.com/apache/zeppelin/pull/1277
  
    First of all - I appreciate you patience and attention to details and your 
code looks great. There are few design aspects of it I wanted to discuss with 
you here
    
    From the diff tab:
    > +116 −36  Options 
    
    This approach, namely, extracting `RevisionId` looks interesting, but in 
this particular case it brings 80 new LOC, add extra class and uses generics, 
parameterized types, `instance of` and a wildcard. 
    
    If I try to understand, what are the benefits of  `Something<?>` compared 
to `Something`, given that `Something` is not some kind of collection, but I'm 
having hard time doing it. I think there are none, and Java Language 
Specification, section [4.8 Raw 
Types](https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.8) 
support my guess
    
    >Raw types are closely related to wildcards. Both are based on existential 
types. Raw types can be thought of as wildcards whose type rules are 
deliberately unsound, to accommodate interaction with legacy code. 
Historically, raw types preceded wildcards;
    
    -----
    
    I think we are on the way of coming up with a better design here together, 
so let's try to follow Occam's razor design principle and think in term of API.
    
    First of all, here is current problem, how I see: we are talking about 
design of the "Notebook Repository subsystem or API" that abstracts (hides all 
implementation details of) the process of getting an information about 
notebooks and it's lineage from the persistent storage. 
    
    This subsystem provides a _public and uniform API_ for all it's clients to 
get the a notebooks, together with their history (modifications\snapshots). 
    
    `NotebookRepo` is part of it, it defines the semantics of the storage 
(list, get, etc), 
    
    `Revision` is another part of it that  represents a point in time, selected 
and annotated by the user. We want `NotebookRepo` semantics to be aware of of 
such entities.
    
    In terms of API design, first question to ask is always the same - "who are 
the clients"? 
    
    In our case there are:
     - `NotebookServer.java`
     - `Notebook.java`
    
    If we agree on this general terms, I'll be happy to go on, and discuss 
possible ways to solve this problem. Please, et me know what you think!


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to