|
From: Martin <cin...@gm...> - 2004-05-26 20:34:38
|
Hi, we have discussed about changing the package structure, but before we go ahead, we should actually have a structure. So let's discuss a bit how to separate the sources, so we can better find them later during the development process. I also noticed that we have dead sources, so we should mark them as dead or remove them directly from the repository. Many sources are written by You, so my suggestions might be incomplete and false here. Please help me to extend them. I will explain in short words my idea to separate the files. I would like to see the sources separated according to use cases, e.g. "main window", "configuration", "channel management", "database storage" etc. So when you look at "MODEL:" with subcategory subscription, we should rather add it to "channel management". I have made some work to determine where a piece of source belongs, but it's not a final decision at all. I don't want to separate the sources according to MVC (model-view-controller), because it will be difficult to follow the processes which a user walks along and which we need to keep together to work efficiently. The MVC structure below exists ONLY to make some helping subcategories. I await your comments, before I go ahead. After we have agreed on a structure, we will give a deadline to make last commits. Here are my first thoughts, Martin MODEL: ------ - subscriptions ./src/de/cinek/rssview/AbstractSubscription.java ./src/de/cinek/rssview/AbstractSubscriptionModel.java ./src/de/cinek/rssview/AbstractArticleModel.java ./src/de/cinek/rssview/Channel.java ./src/de/cinek/rssview/AbstractChannel.java ./src/de/cinek/rssview/ChannelHeader.java ./src/de/cinek/rssview/RssChannel.java ./src/de/cinek/rssview/RssChannelHeader.java ./src/de/cinek/rssview/RssSubscription.java ./src/de/cinek/rssview/RssSubscriptionModel.java - articles ./src/de/cinek/rssview/ArticleModel.java ./src/de/cinek/rssview/RssArticle.java - folders ./src/de/cinek/rssview/RssGroupNode.java VIEW: ----- - utils ./src/de/cinek/rssview/RssSplashScreen.java ./src/de/cinek/rssview/images/IconContainer.java ./src/de/cinek/rssview/RssInfoDialog.java ./src/de/cinek/rssview/ui/HighlightFilter.java - channel tree ./src/de/cinek/rssview/AbstractTreeModel.java ./src/de/cinek/rssview/RssSubscriptionTreeModel.java ./src/de/cinek/rssview/ui/DnDSupportTree.java ./src/de/cinek/rssview/RssChannelCellRenderer.java ./src/de/cinek/rssview/ChannelContentPanel.java ./src/de/cinek/rssview/ChannelTreeCellRenderer.java ./src/de/cinek/rssview/event/ChannelEvent.java ./src/de/cinek/rssview/event/ChannelListener.java ./src/de/cinek/rssview/event/ChannelListenerAdapter.java ./src/de/cinek/rssview/event/ChannelListenerSupport.java ./src/de/cinek/rssview/event/ChannelPropertyChangeEvent.java ./src/de/cinek/rssview/event/ChannelSelectionEvent.java ./src/de/cinek/rssview/event/ChannelSelectionListener.java - main window ./src/de/cinek/rssview/View.java ./src/de/cinek/rssview/RssToolBar.java ./src/de/cinek/rssview/RssChannelList.java ./src/de/cinek/rssview/RssDropDownMenu.java ./src/de/cinek/rssview/RssArticleOverview.java ./src/de/cinek/rssview/RssStatusBar.java ./src/de/cinek/rssview/RssArticleMenu.java ./src/de/cinek/rssview/ui/JToolBarButton.java - article table ./src/de/cinek/rssview/ArticleCellRenderer.java ./src/de/cinek/rssview/ArticleTableModel.java ./src/de/cinek/rssview/DateCellRenderer.java ./src/de/cinek/rssview/RssArticleModel.java ./src/de/cinek/rssview/ui/table/JSortableTable.java ./src/de/cinek/rssview/ui/table/SortableTableHeaderRenderer.java ./src/de/cinek/rssview/ui/table/SortableTableModel.java ./src/de/cinek/rssview/event/ArticleModelEvent.java ./src/de/cinek/rssview/event/ArticleModelListener.java ./src/de/cinek/rssview/event/ArticleSelectionEvent.java ./src/de/cinek/rssview/event/ArticleSelectionListener.java - channel management ./src/de/cinek/rssview/RssChannelDialog.java - view types ./src/de/cinek/rssview/RssChannelView.java ./src/de/cinek/rssview/RssCompactView.java ./src/de/cinek/rssview/RssArticleView.java ./src/de/cinek/rssview/RssExclusiveView.java ./src/de/cinek/rssview/RssStandardView.java ./src/de/cinek/rssview/RssArticleBasedView.java - configuration ./src/de/cinek/rssview/RssSettings.java ./src/de/cinek/rssview/RssBrowserSetupPanel.java ./src/de/cinek/rssview/RssFontSetupPanel.java ./src/de/cinek/rssview/FontChooser.java ./src/de/cinek/rssview/RssGeneralSettingsPanel.java ./src/de/cinek/rssview/RssOptionsDialog.java ./src/de/cinek/rssview/RssProxySetupPanel.java ./src/de/cinek/rssview/RssViewSetupPanel.java ./src/de/cinek/rssview/SetupComponent.java - utils ./src/de/cinek/rssview/RssHTMLEditorKit.java - unknown ./src/de/cinek/rssview/ui/JOptionsTitle.java ./src/de/cinek/rssview/ui/RssFolderDialog.java ./src/de/cinek/rssview/ui/table/StateToComponentCellRenderer.java UTIL: ----- ./src/de/cinek/rssview/BrowserLauncher.java ./src/de/cinek/rssview/HtmlTransformer.java ./src/de/cinek/rssview/RssBeepNotificator.java ./src/de/cinek/rssview/Notificator.java ./src/de/cinek/rssview/RssNotification.java ./src/de/cinek/rssview/RssParser.java - ampheta ./src/de/cinek/rssview/event/AmphetaDeskEvent.java ./src/de/cinek/rssview/event/AmphetaDeskListener.java ./src/de/cinek/rssview/AmphateDeskAdapter.java CONTROLLER: ----------- ./src/de/cinek/rssview/ChannelFetcher.java ./src/de/cinek/rssview/RssBrowserStart.java ./src/de/cinek/rssview/Query.java ./src/de/cinek/rssview/RssQuery.java ./src/de/cinek/rssview/util/FeedGenerator.java - database ./src/de/cinek/rssview/io/DataStore.java ./src/de/cinek/rssview/io/HsqldbDataStore.java UNKNOWN: -------------- ./src/de/cinek/rssview/RssTransferablePath.java ./src/de/cinek/rssview/RssView.java ./src/de/cinek/rssview/Subscription.java ./src/de/cinek/rssview/SubscriptionAdapterTreeModel.java ./src/de/cinek/rssview/SubscriptionModel.java ./src/de/cinek/rssview/dtds/DtdContainer.java ./src/de/cinek/rssview/event/SubscriptionModelEvent.java ./src/de/cinek/rssview/event/SubscriptionModelListener.java |
|
From: Christoph W. <chr...@we...> - 2004-06-01 18:24:09
|
Hi, Be prepared this mail is quite extensive! Martin wrote: > I also noticed that we have dead sources, so we should > mark them as dead or remove them directly from the > repository. Kick bad source whenever encountered. We've CVS let's consult the attic = if we deleted anything useful. > I have made some work to determine where a piece of > source belongs, but it's not a final decision at > all. I don't want to separate the sources according > to MVC (model-view-controller), because it will be > difficult to follow the processes which a user > walks along and which we need to keep together to > work efficiently. > The MVC structure below exists ONLY to make some > helping subcategories. Creating packages accoring to MVC structure is evil and leads to a = couple of circular references (Controller, View as example), no self contained packages etc... > I await your comments, before I go ahead. Here it is! First I refactored subscriptions to channels so let's use the term = channel for both a subscription and an rss feed channel. In case this separation = is no longer present in code. Only one interface "Channel" exists. Let's first start from our "entity" interaces that build the gantry of RssView: * Node=20 - new interface to better manage Channel an RssGroupNodes in our model * CategoryNode=20 - derived from Node - represents a Node with children in our model * Channel * Article Let's augment this list by all classes that are directly used by these interfaces: Channel: * ChannelListener * ChannelHeader * Query If we could extract these classes to a package for example "core" and = add the classes that implement Node, CategoryNode , Channel and Article interfaces we get a perfect package. Imho we should not try to move our Listener/Event/EventSupport classes = to this package but give them a seperate "sub-packages" named event. We should not move any "reusable" UI Classes to specific packages. = Example: > - channel tree > ./src/de/cinek/rssview/ui/DnDSupportTree.java We could instead create a package for these self contained Classes named "widgets" or something similar. We use these classes like we would use = some third party component they don't depend on the rest of rssview. This is especially true for Sortable Table components. Well suitable canidats for this package are also: > ./src/de/cinek/rssview/RssSplashScreen.java > ./src/de/cinek/rssview/images/IconContainer.java > ./src/de/cinek/rssview/RssInfoDialog.java > ./src/de/cinek/rssview/ui/HighlightFilter.java Rename the "io" package to dataaccess. Move ampheta desk connectors to connectivity package and Ampheta Desk related events to connectivity.event package Now a proposal for the great package refactoring: Let's take some smaller steps to a better package structure. After every step let's test our refactoring using some metric toolkits like jdepend = to be sure that we're making things better not worse... My proposed package structure (de.cinek.rssview omitted): event dataaccess core widgets widgets.table widgets.dragdrop (perhaps if we find enough classes) connectivity connectivity.event Cheers Christoph PS: This mail was written using Outlook. All package names ment to be in lower case! Even if Outlook does not mean that. |