Как снизить зависимость нескольких классов друг от друга при применении композиции?
Делаю небольшую программку, которая должна открывать файлы .cs, созданные в Visual Studio. Для того, чтобы открывались именно нужные файлы, нужно анализировать файлы решения и всех проектов из него (.sln и .csproj). Для представления в программе написал простенькую структуру из трех классов, которыми предполагалось представлять в программе каждое отдельное решение. Классы объединены по принципу композиции, за создание каждого отдельного класса предполагалось сделать ответственным статический метод внутри этого класса. На данный момент все выглядит примерно так:
public class Solution
{
public List<Project> Projects { get; }
private Solution(params Project[] projects)
{
Projects = projects.ToList();
}
public static Solution CreateFromFile(string pathToFile)
{
return new Solution(
pathToFile,
ProjectFileHelper.ExtractFilePaths(
File.ReadAllText(pathToFile),
FileExtension.Sln)
.Select(path => Project.CreateFromFile(path))
.ToArray());
}
}
Класс Project и CodeFile выглядят аналогично, за исключением логики метода CreateFromFile класса CodeFile - он просто открывает кодовый файл как текст и записывает в поле.
Выглядит вроде бы чистенько - инкапсуляция, композиция, все дела... Однако данная галиматья совершенно нетестируема по причине того, что объекты Project и CodeFile создаются самим классом Solution, а не получаются им извне. Подскажите, пожалуйста, как следовало рассуждать с самого начала, решая задачу представления проекта студии в своей программе? Сложность-то у нее смешная...