Одной частью ответа должны быть контр-вопросы, такие как:
- Почему ваш класс такой большой, что его нужно разделить?
- Вы уверены, что ваш класснастолько велика, что должна быть разделена?(Насколько велик «большой»?)
- Вы уверены, что ваш класс правильно абстрагирован?
- Можете ли вы превратить общие функции в новый класс, который вы можете использовать основным классом, который выработаете с?Это скроет функции за барьером интерфейса класса.
В целом, если вы можете избежать этого, не разбивайте файл класса произвольно из-за ограничений размера;держите вместе то, что принадлежит друг другу.
Ужасная возможность
Предполагая, что разделение необходимо, а ортодоксальное разделение (на различные классы, которые работают вместе) невозможно, возникает вопрос: насколько ужаснопримете ли вы ваш код?(Это уже немного ужасно, так как в одном файле очень много функций; можете ли вы сделать его еще более ужасным?)
Предположим, ваш класс состоит из 4 (или более) файлов.
- class.h
- class.c
- class1.c
- class2.c
Заголовок, class.h
,ортодоксален - самодостаточен и идемпотентен.Он используется внешним миром (т.е. вне этой коллекции исходного кода) для доступа к средствам, предоставляемым классом.
Файлы class1.c
и class2.c
содержат реализации функций в классе.Им может быть предоставлен отдельный отличительный суффикс файла - в этом могут быть некоторые преимущества.Файлы не предназначены для автономной компиляции;это просто удобство, которое разделяет источник, потому что класс стал слишком большим.
Файл class.c
- это то, что вы компилируете.Он содержит:
#include "class.h"
- Другие определения, необходимые внутренним классам класса.
#include "class1.c"
#include "class2.c"
Таким образом, хотя источник разделен, вы фактически компилируете один файл, class.c
.
В вашем makefile
или его эквиваленте вы указываете, что class.o
зависит от заголовкаи все три исходных файла;если какие-либо из этих изменений, то вам нужно перекомпилировать всю партию.Одним из преимуществ изменения суффикса файлов реализации (class1.c
и class2.c
) является то, что они не будут компилироваться отдельно, поскольку суффикс не распознается компилятором C (Objective-C).Недостатком изменения суффикса является то, что ваш редактор с поддержкой синтаксиса не будет знать о правильной подсветке синтаксиса для отдельных файлов, если вы не укажете ему тип файла.Если вы используете IDE, эта хитрость также может быть менее чем удивлена.
Если вы работаете на машине, где размер источника означает, что он не может быть скомпилирован сразу, как в этом случае, вы попадаете в снукер,Эта техника не помогает вообще;Вы должны разделить файлы и скомпилировать их отдельно.В этом случае действительно внимательно посмотрите, можете ли вы аккуратно разделить код на несколько классов, которыми можно управлять по-ортодоксально.