If you are like me and you have some java background then you like your projects structured in this way:
mynice-project-api
mynice-project-impl
myothernice-project-api
myothernice-project-impl
Because in this project construction methodology you have a clear separation between your api’s and implementations. Or
so to say you can use your favorite build tool to have your project compile against the api
and run with the impl
.
And for the bored programmers of our time you can event invest the time to replace your impl1
by impl-mock
. However,
I’m taking you as a serious developer transitioning into a more fp
language, like scala
.
However if you have transitioned to scala
. So in scala we are very used to having traits
everywhere, and hell, i mean
everywhere. Not a single impl
without an interface
. However if you noticed then in 99% of cases the traits are in same
files
as the implementations. Not to mentioned you have the sealed
option which will force you to have it in same file.
And thus the -api
-impl
is gone. So lets acknowledge it at least.
We have disregarded the sepration between the -api
and -impl
because we use traits all over the place. And you know what?
So far its working well for us, i mean, any serious programmer will enforce coding to an interface, so this separation of projects
is actually redundant for us, we even got half the amount of projects to maintain. Seriously how many times did you really replace that
impl
project with another one? I’ve seen hundreds of projects with that seperation and in none of them it was actually replaced. so
lets at least acknowledge it. And with the new programming paradigm, its so easy to create interfaces
we do it all over, and we don’t need
another project to convince us we need to create such a new interface.
And you know what? if you really really need such separation in a specific place go ahead, but no reason to have it all over the place cluttering our project workspace.