Essentials icon indicating copy to clipboard operation
Essentials copied to clipboard

[FEATURE]-Document all Interfaces and BaseClasses and their purposes

Open ngenovese11 opened this issue 5 years ago • 2 comments

Is your feature request related to a problem? Please describe. I would like to ensure I am incorporating as many Essentials Interfaces and Base Classes into my plugins. A central document detailing these members would be helpful in ensuring I don't duplicate work.

Describe the solution you'd like A Wiki Page with approved Interfaces and BaseClasses with a brief description

ngenovese11 avatar May 21 '20 15:05 ngenovese11

I want to resurface this issue. Interfaces definition and organization is paramount for plugin development. Better grouping of the interfaces or a separate project entirely will make the interfaces more accessible. This new org structure can reference existing interfaces keeping backwards compatibility and allow for growth and expansion.

I think a restructuring and organization of the interfaces needs to take place before the documentation.

Linking this with comments on #508

@ndorin @andrew-welker What steps can we take to help push this forward?

jtalborough avatar Mar 15 '22 15:03 jtalborough

Something @ndorin and I were just discussing on the training call is moving all the interfaces to an appropriate namespace in each assembly. This would necessitate updating using statements when referencing the version of Essentials that implements this. This would at least allow some consistency in finding where existing interfaces live.

So, for example, interfaces in the DevicesCommon assembly would live in the PepperDash.Essentials.DevicesCommon.Interfaces namespace, and we could break it down further into device categories if that's desired.

We could also keep the namespace common between assemblies (Crestron does this...) so that all interfaces end up in the same namespace, but what interfaces show up in Intellisense would be governed by what assemblies are referenced. I'd suggest a namespace like PepperDash.Essentials.Interfaces. Again, we can break it down further into device categories to aid with Intellisense.

The second part of this is using XML comments in Essentials and PepperDash Core to document methods, classes, interfaces, etc, then using that produced XML documentation to create a website hosted using Github Pages that would be updated every time a full version of Essentials is released. This would necessitate help from EVERYONE, as this is a huge undertaking, as there are a LOT of things that need XML comments added in Essentials and PepperDash Core. If developers could take a minute and even go through one class or interface when/if they have time, starting in PD Core, it would really help.

At some point in the next few weeks, I'll work on taking the XML comments and getting the web page produced and updating workflows in PD Core and Essentials to do that.

I think moving things into new namespaces is something we could do for the 1.10.0 release, once we decide on how to organize them.

andrew-welker avatar Mar 15 '22 17:03 andrew-welker