Salut tout le monde.

Je désire créer une API. J'ai déjà tout le code des objets métiers qui sert dans une application. Le but est de faire une API sur cette application.

J'ai suivi quelques tutoriels et je suis en train de prendre en main le biniou.

Je me heurte sur un problème d'architecture.
Comment faire coller les objets COM aux objets métiers ?

J'ai par exemple 2 objets métiers : TMyComposant et TMyComposantList.
TMyComposantList possède une méthode GetByNom qui prend le nom du TMyComposant en paramètre et renvoie le TMyComposant correspondant. Rien de bien sorcier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
function GetByNom( aNom : string ) : TMyComposant;
var
  i : Integer;
begin
  Result := nil;
  for i := 0 to Count - 1 do
    if Items[ i ].Nom = aNom then
    begin
      Result := Items[ i ];
      Break;
    end;
end;
Dans l'API, je crée 2 interfaces IComMyComposant et IComMyComposantList avec leurs objets implémentés associés.

J'ai défini une propriété ByNom prenant un WideString en paramètre et retournant un IComMyComposant.

Mais ensuite, je ne peux pas mettre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
function TComMyComposantList.Get_ByNom( const aNom : WideString ) : IComMyComposant;
begin
  Result := FMyComposantList.GetByNom( aNom );
end;
Avec FMyComposantList étant un TMyComposantList mis en private.
Je ne peux pas faire ainsi car ça va retourner un TMyComposant et non pas un IComMyComposant.

Je ne voudrais pas non plus devoir redévelopper chacune des méthodes mais pouvoir les réutiliser.

Je me suis dit que peut-être serrait-il mieux d'intégrer l'un dans l'autre. C'est-à-dire faire dériver mes composants directement TAutoObject et non plus de TObject, mais le soucis est que les composant dérivent pour l'instant de TComponent et qu'il n'existe pas de TAutoComponent.

J'ai aussi des objets qui dérivent de TList et si je veux faire dériver de TAutoObject, je suis coincé car on ne peut pas faire d'héritage multiple en Delphi.

En fait, je ne sais pas très bien qu'elle architecture choisir pour développer une API. Et je ne trouve que de l'aide théorique sur les objets COM et pas de conseils sur leur utilisation.

Merci pour votre aide, j'espère que j'ai pas été trop confus.