For package - privated classes, I absolutely disagree.
There will be a big drawback : in order to use them, all the classes split
in the metadata, resultset, sql and other packages for dispatching and
readability would have to return to the org.apache.sis.storage.shapefile
package : else the compiler will cause compilations failures due to
visibility. This would result in a package containing 50 classes. And I
don't want that. Especially because the JDBC driver only begins, and at
least 50 or 100 new classes will appear, for insertion, update, deletion
handling, better parsing, etc.
By the way, the Mapped bytes buffer and other classes will be changed one
way or another during insert / update / delete operations because they
cannot stand these operations.
The goal of AbstractAutoChecker is not only the jdbc package, but I cannot
explain it yet really clearly.
While I try to set main features for SQL (especially this time : Insert /
Update / Delete, and better parser for multi-condition request), I would
like no one attempt to refactor the code in any way, except if a bug
appears, even if it causes to show temporary a public class or causes some
performances leaks (what is not important : it's the first time we are
querying databases !). They are minors troubles compared to what is
attempted and will only be corrected at the end of the process.
Attempting to put private-package classes, final methods, or to achieve
performance by doing special refactoring now, would immediately stop my work
:
I have set the packages and the classes in a way to allow them to grow and
change quickly, be able to refactor them easily, and especially : split and
split them again. What would be the gain of having done many minors changes
and these optimizations for technician pleasure (because private-package,
final methods and so are that : they have no use at the end, they are only
done to loose time, most of the time), if it's not to have some really
useful features that we can show to users ?
I don't want any changes now. Especially for these little matters.
My goal is to help to finish a reliable geomatic API. Not to loose myself in
technician dreams ! I don't want to make internal optimizations now. I focus
on progressing, testing, checking. Not on keywords !!!!!
Of course I can't be 100% compliant to all the rules known. No one can be.
Because they are some Java Divas who are creating these rules all the time
in order to sell books without considering the trouble they are generating !
I hope that the way I write 90% of the source code is good, that's all,
provided it is 100% free of bugs. Trying to be 100% compliant with standards
transforms any project to a crystal where no one can no more move : there
will always be a little thing you have forgotten that a book said at page
142. They will always be someone that could change one line, and another,
and another. But while doing this, end user see no additional useful
features. It's a trap !
Please stop busting every line code I am writting. I told you earlier that
it was a long term development. Of course it is ! It is even hard to find
the way to accomplish the next steps. Don't ask for changes for little
things like that !
It would really destroy the work done. For nothing.
Don't attempt to make refactoring immediately. We need to succeed in
implementing features first. If they are tested, working and showable, it's
fine. It will be easy to refactor and profile at the end when all the
non-regression test will be there to ensure that you can go from a slow
version 1 to a fast version 2. But first : I have to succeed in slow version
1 and compliant only to 90% of the Java standards.
Regards,
Marc.
-----Message d'origine-----
From: Martin Desruisseaux
Sent: Tuesday, December 16, 2014 4:46 AM
To: Apache SIS
Subject: Preparing for SIS 0.5 RC
Hello all
I would like to prepare a SIS Release Candidate (RC) soon. But before
doing so, I would like a consolidation of the ShapeFile API. This does
not affect the internal JDBC implementation, only the public API (even
if incomplete, we can complete later). The package is:
https://builds.apache.org/job/sis-dev/javadoc/org/apache/sis/storage/shapefile/package-summary.html
My suggestions:
* Make FieldDescriptor and FieldDescriptors class package-privated,
because they seem to be implementation details internal to the
Shapefile reader.
* Make DataType and ShapeTypeEnum package-privated for now, because I
think that they may be partially replaced by more generic
constructs. For example the categorization of geometries in point,
polyline, polygon, etc. is not specific to the Shapefile format.
* Make Database a package-private class, or move it in an internal
package for now, as it depends on AbstractAutoChecker (which we
suggested to move in an internal package too) and to give us more
time to review its API:
o For example the current Database API provides a public
getByteBuffer() method which returns the MappedByteBuffer used
internally by the Database. I think it is quite dangerous to
expose publicly such Database internal.
* ShapeFile should extend DataStore, and its fields should be private.
What do you think?
Martin