Как снизить зависимость нескольких классов друг от друга при применении композиции?

Делаю небольшую программку, которая должна открывать файлы .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, а не получаются им извне. Подскажите, пожалуйста, как следовало рассуждать с самого начала, решая задачу представления проекта студии в своей программе? Сложность-то у нее смешная...


Ответы (0 шт):