Design Principles
Core Principles
Cabriolet follows these design principles:
Object-Oriented Programming
-
Everything is an object with clear responsibilities
-
Inheritance for shared behavior
-
Composition over complex inheritance
MECE (Mutually Exclusive, Collectively Exhaustive)
-
Classes handle distinct, non-overlapping concerns
-
All functionality covered without gaps
-
No duplication of responsibility
Implementation
# Good: Clear separation
class CABDecompressor
def initialize(handle)
@parser = CAB::Parser.new(handle)
@cabinet = @parser.parse
end
def extract_file(filename, output)
file = find_file(filename)
folder = @cabinet.folders[file.folder_index]
decompressor = create_decompressor(folder.compression_type)
decompressor.decompress(folder.data, output)
end
end
# Bad: Mixed concerns
class BadDecompressor
def extract(filename)
# Parsing, decompression, I/O all mixed together
end
end