interfaces / implementations separation (was Let's discuss KDevelop4 interfaces and shell)

Alexander Dymo dymo at ukrpost.ua
Fri Jan 19 14:30:06 UTC 2007


Ok, Matt is right I indeed need to provide the reasoning for 
interfaces/implementations separation.

What do I mean when I talk about interfaces:
- interfaces should be abstract classes (whenever possible)
  which will expose only essential parts of KDevelop core functionality

What would be the purpose of such interfaces:
1) to explicitly expose the API to our plugins
	Our plugins do not need to have access to the whole
	functionality of core components. They should just
	listen to some signals, get some events and call
	some controller methods and the job of interfaces is just
	to declare what's available.

2) abstract, minimal, clean and independent interfaces would:
- make it easier for new developers to approach KDevelop4 development
  and understand the architecture
- make it easier to implement new plugins because plugin implementers
  would just have to look at interfaces to see what's possible in KDevelop

3) abstract, minimal, clean and independent interfaces would:
- allow us to not care about BC in the shell
	Our "shell" (read implementation of a plugin loader, project loader,
	main window stuff) should not be kept BC. Shell is evolving target
	and keeping BC there would make it harder to improve KDevelop.
- allow us to keep BC only for small interfaces
	This way shell and plugins can evolve in various ways but still the
	shell would load plugins and plugins would still be able to access
	core functionality

What I don't want our interfaces to do:
1) I don't want our interfaces to allow to implement another version of
  a platform. Nobody will do that and nobody needs that.
  From our experience with KDevelop3 and Kuanta, I'd conclude that 
  alternative platform implementation is a myth.

What I want our interfaces to be:
1) The entry point to understanding KDevelop architecture
2) The clear set of things all platform plugins can use/call/access/whatever.





More information about the KDevelop-devel mailing list