Wed Oct 17 - Avoiding Code Smells by Walter Bright

unprotected-entity unprotected-entity at gmail.com
Thu Nov 1 02:45:19 UTC 2018


On Wednesday, 31 October 2018 at 13:28:54 UTC, rikki cattermole 
wrote:
> On 01/11/2018 2:25 AM, 12345swordy wrote:
>> On Wednesday, 31 October 2018 at 13:22:28 UTC, rikki 
>> cattermole wrote:
>>> On 01/11/2018 2:16 AM, 12345swordy wrote:
>>>> On Wednesday, 31 October 2018 at 05:42:26 UTC, Nicholas 
>>>> Wilson wrote:
>>>>> Running into such problems is a sign that your module is 
>>>>> too large, and should become a package.
>>>> I seen modules with more then thousand lines of code in the 
>>>> Phobos library. What exactly consist a module of being "too 
>>>> large"? If having two classes in a module with around 
>>>> 200-300 lines of code "too large"?
>>>
>>> We have been splitting Phobos modules up:
>>>
>>> std.algorithm and most recently std.datetime
>>>
>>> They were MASSIVE as in 30k+ LOC massive.
>> 
>> That's nice.
>> Again what consist of a module of being "too large"?
>> That seems to me that more of a art then a science.
>
> Because it is.
>
> My rules (which tend to be a little stricter than most peoples) 
> are:
>
> Soft split 1k LOC, hard split 3k LOC without a very good reason 
> not to.
>
> But at the end of the day, it just depends on the scope of the 
> module. Is it getting to large? If so, split.

I really do disagree.

It's is not at all, about LOC.

It is about clean architecture.

D module's do not promote clean architecture. Why? Because 
private state is exposed to all code within a module. What will 
happen to clean architecture, when you make that available to 
programmers? Well.. we get phobos like architecture.

Another thing to look for, is signs of code smell. I would 
include in this, unit tests calling private methods (which seems 
to be a popular thing for D programmers to do). Some will 
disagree that this is a code smell, but I have yet to see a good 
argument for why it is not.

Forget LOC. Look for good architecture, decoupling, modularity, 
encapsulation, information hiding....etc..etc... again, sadly, 
these concepts are not directly promoted when writing modules in 
D, since the module exposes everything to everything else in the 
module - and programmers will surely make use of any convenient 
hack that avoids them having to think about good architecture ;-)




More information about the Digitalmars-d-announce mailing list