8

I am picking up an existing codebase that is Groovy and Grails, but the package structure seems very odd to me.

For a domain class they put it in the following package com.company.domain then for the controller of that class it is com.company.controller

That structure seems very off to me since the domain and controller classes are already organized under their own folders in the grails-app folder.

My plan is to redo the packages and group based on actual use such as com.company.billing and com.company.util .

Are there any disadvantages to my plan? Is there anything good about the current package structure that I'm missing?

Jeff Beck
  • 3,944
  • 3
  • 28
  • 45

1 Answers1

10

I think package names should separate code belonging to different business aspects. For e.g. a shopping website, I'd recommend:

  • com.mycompany.myfancywebsite.product to all product related stuff (e.g. Product domain class, ProductDetailController etc.)
  • com.mycompany.myfancywebsite.cart to all shopping cart related stuff (e.g. CartController, ShippingCostCalculationService etc.)
  • com.mycompany.myfancywebsite.payment to all payment related things

IMHO it does not make sense to use package names to distinguish the "type" of code (e.g. domain, controller, service...), this simply adds no value to it.

I'd also recommend carefully using util in package names, this might be a sign that your code is not focussed enought.

For further reading, see the excellent book "Clean code". Also see http://weblog.dangertree.net/2008/11/22/grails-package-naming/

Stefan Armbruster
  • 39,465
  • 6
  • 87
  • 97
  • Thanks, I mostly tossed util in there to try and use something generic. – Jeff Beck Mar 22 '11 at 13:40
  • I checked out the link it looks great and it does specifically call out not to use packages for the type of code. – Jeff Beck Mar 22 '11 at 13:44
  • 2
    +1 for suggesting "clean code".. it's really an amazing book :) – lucke84 Mar 22 '11 at 13:58
  • The above Link have been removed. Here is the archive link http://web.archive.org/web/20111205185112/http://weblog.dangertree.net/2008/11/22/grails-package-naming – abdul Feb 05 '15 at 15:54