Unit Tests einzusetzen, um die gewünschte Paketstruktur einer Architektur einzusetzen ist ein alter, aber leider nicht so häufig eingesetzter Trick. Er lässt sich recht einfach mit JDepend in Projekten umsetzen, und ist sehr gut hier dokumentiert: http://www.clarkware.com/software/JDepend.html#junit
In Scala geht dies mit Hilfe des Specs2 Test Frameworks noch einfacher, weil es bereits einen Matcher dafür vorsieht. Dieser ist zwar zur Zeit nur für einfache Zwecke geeignet, kann aber auch leicht selbst angepasst werden.
[code]
package design
import org.specs2.mutable._
import org.specs2.specification.Analysis
class DependencySpec extends SpecificationWithJUnit with Analysis {
val design = layers( // 4 Schichten definieren
„view“,
„controllers“,
„backend“,
„model util“
).inTargetDir(„target/scala-2.10/classes“)
„Program design“ should {
„adhere to layer structure“ in {
design must beRespected
}
}
}
[/code]
Der Test kann dann ganz einfach ausgeführt werden und berichtet über eventuelle Verstöße, bzw. in einer netten Welt ist alles grün:
[code]
[info] DependencySpec
[info] Program design should
[info] + adhere to layer structure
[info] Total for specification DependencySpec
[info] Finished in 868 ms
[info] 1 example, 0 failure, 0 error
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[/code]