Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to organise classes, packages [closed]

How do you decide what a package name should be and what class should go into what package ?

I'm working on a project where I am constantly adding/removing classes and not really sure if I need a new package, or should add it to an existing one that im not currently aware of.

Do you follow a set of rules when creating a new package ?

How do you know if you are not duplicating package functionality ? Is this just down to familiarity with the project.

Any pointers appreciated.

like image 959
blue-sky Avatar asked Sep 22 '11 13:09

blue-sky


3 Answers

I don't believe there are any hard and fast rules on packaging convention (though I could be wrong). Normally I break it up into

com.mycompanyname and then:

  • api
  • controllers
  • data (for models)
  • jobs (for cron jobs)
  • reporting
  • servlet
  • utils

If I find I have a class which does not fit into any of those, then I create a new package.

like image 60
Gerard Avatar answered Oct 20 '22 03:10

Gerard


I strongly discourage from organizing packages from an implementational point of view, like controllers, data, etc. I prefer grouping them by functionality, that is, feature1, feature2, etc. If a feature is reasonably complex and requires a large number of classes, then (and only then) I create subpackages like above, that is, feature1.controllers, feature1.data, etc.

like image 45
michael667 Avatar answered Oct 20 '22 02:10

michael667


Classes should do one thing (Single Responsibility Principle).

Classes that do related things should go in the same package. If you find you can more closely relate some of the classes in a package, make them a subpackage!

For example, if I had a project with these classes:

  • GreetingInputWindow
  • GreetingDatabaseObject
  • GreetingDatabaseConnector

I might just put them all in the greeting package. If I wanted to, I might put GreetingInputWindow in the greeting.ui package, and the other 2 into the greeting.db package.

like image 29
Josh Pordon Avatar answered Oct 20 '22 02:10

Josh Pordon