What are the heuristics for identifying Java packages? How analogous is the whole exercise to Bobby Woolf's patterns in PartitioningSmalltalkCodeIntoEnvyDeveloperComponents? I've been using PackagePerLayer and sometimes SubPackagePerSection, but then in other cases I have packages which are orthogonal to architectural layers. --RandyStafford ------ Personally, I always try to apply Bobby's rules. However, sometimes you come up with packages that are, as you say almost "orthogonal" to architectural layers. In this case, I often see them as being a separate, vertical stack that crosses many layer boundaries. An example would be "java.util" or "javax.naming". So, my point is to follow Bobby's rules unless you come across a set of "Utility" classes, in which case the naming convention should reflect the overall function of the classes in the package. KyleBrown ---- '''Discussion:''' Are there accepted idioms for naming packages under your domain? For example, is there a set name for the package that contains debugging classes, application framework classes, GUI classes? When you are packaging your classes for reuse, how should the package hierarchy be structured. CraigLarman suggests using names like ''util'', ''framework'', ''ui''. Has Sun published and standards on package names (i.e. ''after'' the com.abc part)? -- RobertDiFalco ---- Robert- The only thing I've seen from Sun is http://java.sun.com/docs/codeconv/index.html, which doesn't really address the level of detail we're talking about here. If you agree with Kyle and me that Bobby Woolf's patterns apply in Java, then its just a matter of choosing a FunctionRevealingPackageName, as Kyle puts it. Applying PackagePerLayer in FoodSmart yielded packages named web, distribution, services, entities, domain, and persistence. Applying LayerIndependentPackage resulted in packages named admin, io, security, and util. -- RandyStafford Yeah, there really is nothing from Sun that I have seen. I tend to follow CraigLarman for package names and JohnLakos for rules regarding package interdependencies. I haven't taken the time to read http://c2.com/ppr/envy/. I'll check it out. Wouldn't the hierarchical naming scheme of Java provide opportunities that are different from SmallTalk? Anyway, while it seems that there are many idioms available, there are no generally accepted, defacto standard convention used by reusable asset vendors. To really pick a nit -- it's also troubling that there are no conventions regarding abbreviations versus whole words versus acronyms. For example, in your LayerIndependentPackage results we have two abbreviations (admin and util), one whole word (security), and one acronym (io). Same with Larman, we have ui (an acronym), util (an abbreviation), and framework (a whole word). -- RobertDiFalco ---- I usually follow Sun's model if I can and beyond that I use package names that reflect the words I use in real life. So the acronym (io) makes sense 'cause I would never actually say ''Input slash Output'' when referring to it. I also frequently refer to ''apps'' I have installed or ''utils'' that really helped me out. I generally use a mixture of PackagePerLayer and LayerIndependentPackage. This means I would have ''util'', ''io'', ''security'' as well as ''gui'' and ''db'' for example.-- IainLowe ---- ''See JavaPackageNames'' ---- CategoryJava ----