Public vs. Published

time to read 2 min | 306 words

imageOne of the thing that you see some people agonizing about is what they should be exposed to the outside world. On the one hand, people have heard all about encapsulation, and how it is going to save the world. On the other hand, we want to expose functionality to the outside world, be it for testing or for advance usages of your software.

Something that I wish that C# had is the published alias to the public keyword, that would have expressed intent in a much easier fashion than just public.

That said, I found a very useful approach to handling this myself. Separating interface and implementation. Let us look at an example:

public interface ICommand
{
     void Init(string[] args);
     void Execute();
}

And an implementation of that:

public class MyCommand : ICommand
{
       public string Key { get; set; }
       public long ByteCount { get; set; }
 

       public void Init(string [] args)
       {
		// parse args to key & byte count
       }
}

Now, if I want to test that I am getting the right thing, I can, easily. At the same time, the published interface of this is ICommand, not whatever is public in MyCommand.

In situations where I have one to one mapping between interfaces and implementations (IUserRepository and UserRepository), this is even more pronounced.