I just wanted to make sure that I understand and can properly articulate the difference between these two concepts.
I've always thought of an implementation detail as being the internal workings of some concrete class behind its exposed public interface.
ie: User:getEmailAddress returns a string. It may fetch this data from one of two private attributes named "email" or "emailAddress".
Whoever is invoking this method doesn't care so long as they receive an email address. This is an implementation detail.
I've noticed that "technical concerns" on the other hand often come up during discussions of Layered Architecture where the Infrastructure layer is responsible for the "How" of our Domain layer which is describing the problem and defining a set of interfaces in order to address that problem.
ie: "How" do I actually send out this email, persist this data, or hash this password as described in the Domain?
One or more classes within the infrastructure layer "may" implement the same interface and these classes which share an interface will by definition address the same technical concern (either sending mail, persisting data, etc).
Would you say that these definitions are accurate?
Thanks.