DirichletBC represents Dirichlet bcs (more specifically, bcs that are imposed algebraically), and for some cases it also performs the modification of matrices and vectors.
The class is getting complicated because it does too much. The representation of Dirichlet bcs is common for different assemblers, but the modification of matrices and vectors is not common to all assemblers. For this reason and to simplify the class, it makes sense to split it onto two: one class that represent a Dirichlet bc, and once class to modify matrices and vectors.
I guess a first step is to deprecate
DirichletBC::apply(), and provide an alternative way of modifying LA objects. Should that be via free functions, a new class, or member functions of Vector/Matrix etc.?