class ComponentFactory:
def __init__(self, config: SpellCheckerConfig):
self.config = config
def create_all(self, provider, segmenter) -> dict[str, Any]:
"""Create all SpellChecker components in proper dependency order.
Returns a dict with keys:
syllable_validator, word_validator, context_validator,
viterbi_tagger, joint_segment_tagger, syntactic_rule_checker,
semantic_checker, context_checker, name_heuristic, phonetic_hasher
"""
# 1. Create algorithm components (SymSpell, ViterbiTagger, etc.)
phonetic_hasher = self.create_phonetic_hasher()
symspell = self.create_symspell(provider, phonetic_hasher)
# ... POS probabilities, context checker, etc.
# 2. Create validators with their actual constructor signatures
syllable_validator = SyllableValidator(
config=self.config,
segmenter=segmenter,
repository=provider, # SyllableRepository interface
symspell=symspell,
syllable_rule_validator=SyllableRuleValidator(),
)
word_validator = WordValidator(
config=self.config,
segmenter=segmenter,
word_repository=provider, # WordRepository interface
syllable_repository=provider, # SyllableRepository interface
symspell=symspell,
context_checker=context_checker,
suggestion_strategy=suggestion_strategy,
)
# ContextValidator uses the Strategy Pattern -- grammar checking
# (SyntacticRuleChecker) is one of several strategies, not a
# separate validator.
context_validator = ContextValidator(
config=self.config,
segmenter=segmenter,
strategies=[...], # List of ValidationStrategy instances
name_heuristic=name_heuristic,
)
return {
"syllable_validator": syllable_validator,
"word_validator": word_validator,
"context_validator": context_validator,
# ... other components
}