I’m a really big fan of encapsulation. I use it all the time, and I’m always looking for improved techniques. One technique I’ve been using recently (in C#) involves using interfaces, nested classes, and a factory method. Here’s an example:
public interface IFoo
{
IBar GetBar();
}
public interface IBar
{
void SomeMethod();
}
public static class Foo
{
public static IFoo Create()
{
return new FooInternal();
}
private class FooInternal: IFoo
{
public IBar GetBar()
{
return new BarInternal();
}
}
private class BarInternal: IBar
{
public void SomeMethod()
{
}
}
}
A user of this code could do something like this:
var foo = Foo.Create(); var bar = foo.GetBar(); bar.SomeMethod();
But they wouldn’t have any direct access to FooInternal or BarInternal — which is a good thing! However, FooInternal and BarInternal could access each other if needed.
One downside: using nested classes in this way makes testing a bit harder since you can’t individually create and test FooInternal and BarInternal.
Share:

