Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/08/2012, à 11:08

STR_Locke

[RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Bonjour,

Voilà, juste par curiosité : existe t-il des langages (non propriétaire), qui gèreraient les 3 couches de l'architecture 3 tiers, en gros :
- Présentation (Utilisateur) : création d'une interface graphique ;
- Traitement métier  : préparation d'une requête à envoyer à la BDD/Traitement du résultat de la requête ;
- Données : interrogation de la BDD / restituition brut des données.

Il est possible de faire ça avec plusieurs langages, exemple en web :
-HTML/CSS/Javascript pour l'interface utilisateur ;
- PHP  pour la gestion de la requête et le traitement du résultat ;
- SQL pour interroger la BDD ;

Existerait-il donc un langage qui permettrait de couvrir ces 3 fonctions directement (sans passer par une API ou un autre langage)?

Il existe des solutions propriétaires (Progress, et peut être Oracle), mais du coté Open-Source je n'ai encore rien vu de tel.

Merci d'avance,

Dernière modification par STR_Locke (Le 18/08/2012, à 10:46)


Avec l'iNukes, atomisez une pomme.

Hors ligne

#2 Le 05/08/2012, à 13:26

Haleth

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Ben, tu peux faire ca avec tout les langages.

Par exemple:
- IHM en C (avec lib SDL, QT, GTK ou autre)
- traitement en C
- récupération des données en C

Autre exemple:
- IHM en Python (idem que ce dessus)
- traitement en Python
- récupération des données en Python


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 05/08/2012, à 13:30

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Haleth a écrit :

Ben, tu peux faire ca avec tout les langages.

Par exemple:
- IHM en C (avec lib SDL, QT, GTK ou autre)
- traitement en C
- récupération des données en C

Autre exemple:
- IHM en Python (idem que ce dessus)
- traitement en Python
- récupération des données en Python


Ça existe des BDD/requêtes en C/Python ?


Avec l'iNukes, atomisez une pomme.

Hors ligne

#4 Le 05/08/2012, à 13:33

Haleth

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Tout ces langages possèdent des moyens d'accèder à une base de données, oui
Le plus souvent via un bind mysql, oracle, psql ou autre
Dans ce cas, le langage est le SQL (DB oblige smile )

Mais tu n'es pas obligé d'utiliser une base de donnée, l'architecture 3-tiers est utilisable sur tout les projets.
Ainsi, la couche donnée peut se baser sur des fichiers (par exemple, un lecteur vidéo a pour donner le film qu'il affiche)


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#5 Le 05/08/2012, à 13:48

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Haleth a écrit :

Tout ces langages possèdent des moyens d'accèder à une base de données, oui
Le plus souvent via un bind mysql, oracle, psql ou autre

C'est justement ce que je souhaiterai éviter : ne pas utiliser de bind ou d'Api pour faire des requêtes dans un autre langage. je sais qu'on pêut en PHP utiliser par exemple :

mysql_query("SELECT * FROM table");

Mais ce n'est pas ce que je veux. Car dans ce cas, on uitilise PHP + SQL.



Haleth a écrit :

Dans ce cas, le langage est le SQL (DB oblige smile )

Si SQL est incontournable pour les requêtes, alors existe t-il par exemple un moyen de faire la couche présentation et métier en SQL uniquement ? Par exemple, créer une GUI en SQL, c'est possible ?
L'idée ici, ce serait par exemple de faire une application entièrement en SQL (par exemple), sans faire intervenir un autre langage.




Haleth a écrit :

Mais tu n'es pas obligé d'utiliser une base de donnée, l'architecture 3-tiers est utilisable sur tout les projets.
Ainsi, la couche donnée peut se baser sur des fichiers (par exemple, un lecteur vidéo a pour donner le film qu'il affiche)


En fait, ce que je voudrais, c'est justement pouvoir utiliser une DB. Après, qu'elle soit en SQL ou autre chose  (si ça existe), peut importe.

Dernière modification par STR_Locke (Le 05/08/2012, à 13:49)


Avec l'iNukes, atomisez une pomme.

Hors ligne

#6 Le 05/08/2012, à 13:50

Haleth

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Oula, non
Le SQL est uniquement pour la base de donnée, et on ne manipule une base de donnée qu'avec le SQL

En gros, si tu veux utiliser une base, tu DOIS utiliser sql ET autre chose


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#7 Le 05/08/2012, à 13:52

grim7reaper

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

STR_Locke a écrit :

Ça existe des BDD/requêtes en C/Python ?

Une BDD en C ou Python, c’est à dire ?
Pour les requêtes, c’est le but des ORM (genre SQLAlchemy en Python) ils me semblent. Tu utilises ton langage, tu ne fais pas de SQL directement.

Dernière modification par grim7reaper (Le 05/08/2012, à 13:53)

Hors ligne

#8 Le 05/08/2012, à 14:00

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Haleth a écrit :

Oula, non
Le SQL est uniquement pour la base de donnée, et on ne manipule une base de donnée qu'avec le SQL

En gros, si tu veux utiliser une base, tu DOIS utiliser sql ET autre chose

C'est bien ce que je pensais, je voulais juste avoir une confirmation au cas où.

Par contre, le langage propriétaire Progress ABL permet lui aussi d'interroger une BDD (au format propriétaire Progress, évidemment -_-), mais on peut également faire avec ce seul langage une application entière : GUI, couche métier, requête/altération d'une base/table.
On peut par exemple lancer une requête et en traiter directement le résultat sans changer de langage.

Ce langage n'est pas très connu, peu utilisé, et fermé (proprio). Par contre, il fourni des facilités de programmation assez intéressantes et originales.
Je voulais donc juste savoir si une alternative OpenSource existait (comme c'est assez souvent le cas), ou était en cours d'élaboration/de discussion.

Mais je n'ai encore jamais rien trouvé à ce sujet...


Avec l'iNukes, atomisez une pomme.

Hors ligne

#9 Le 05/08/2012, à 17:31

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Ce sont des frameworks, mais pas des langages à proprement parler.

Enfin merci quand même. Si vous trouvez autre chose, n'hésites pas smile

Dernière modification par STR_Locke (Le 05/08/2012, à 21:39)


Avec l'iNukes, atomisez une pomme.

Hors ligne

#10 Le 07/08/2012, à 08:28

Mathieu147

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Bonjour,

Effectivement, il est impossible de faire une interface utilisateur, ou même de la programmation même en SQL. SQL est un langage d'interrogation de bases de données, et il n'est pas du tout prévu pour faire autre chose.

Comme le dit grim7reaper, tu peux utiliser un ORM. Soit une bibliothèque déjà toute faite, soit tu te fais tes bindings toi-même. Au lieu de lancer une requête SQL directement, puis de récupérer les résultats et de les traiter comme un tableau, tu instancies une classe, tu utilise une de ses méthodes, et tu récupères un objet qui représente tes données.

Mettons que tu veux programmer en C++ ou Java ou Python par exemple. Si il y avait, dans ce langage, des façons simples d'accéder à une base de données sans SQL, ça prendrait la forme d'une classe dont tu passerais en argument au constructeur le nom de la table par exemple. Ensuite tu aurais des méthodes, du genre findAll() équivalente au SELECT * ou bien delete(id) équivalente au DELETE FROM table WHERE id=trucbidule. Et puis tu ferais un foreach sur le résultat, et ce genre de choses.

Ah mais ça tombe bien, c'est justement le principe des ORM! Si tu as des besoins assez basique, ou justement assez exotiques, tu ne devras peut-être pas utiliser d'ORM déjà tout fait mais le programmer toi-même. Mais à un moment, tu devras toujours bien utiliser une requête SQL ou l'autre. La seule possibilité pour n'utiliser aucune requête SQL est le cas où tu utilises un ORM déjà tout fait et que tes besoins sont suffisamment basique pour ne pas devoir créer une méthode personnalisée.

Edit: ah oui, j'ai oublié de poser une question: pourquoi tu veux absolument le même langage partout?

Dernière modification par Mathieu147 (Le 07/08/2012, à 08:31)


Pffff…

Hors ligne

#11 Le 07/08/2012, à 21:48

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Mathieu147 a écrit :

Edit: ah oui, j'ai oublié de poser une question: pourquoi tu veux absolument le même langage partout?

Tout d'abord, merci pour cette réponse complète et détaille qui me permet des pistes de recherche intéressantes.

Pour répondre à ta question, je voulais savoir si il y avait éventuellement possibilité de se passer d'une API quelconque, et voir si cela pouvait être intéressant.

En fait, je suis amené à travaillé sur un langage qui s'appelle Progress, et qui fait déjà ce que je disait avant : pouvoir tout faire dans un seul langage : traitement, requêtes, etc.
Il le fait sur un modèle procédurale uniquement, mais surtout c’est propriétaire, fermé et non standard
Bref, simple question de curiosté : je me demandais si il existait une alternative libre à la solution "Progress" propriétaire.

Merci, je vais creuser un peu la piste "ORM".


Avec l'iNukes, atomisez une pomme.

Hors ligne

#12 Le 08/08/2012, à 10:15

Mathieu147

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Et ça ressemble à quoi Progress? Tu peux donner un exemple de fonction «normale» et de requête à une base de données?


Pffff…

Hors ligne

#13 Le 08/08/2012, à 20:47

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Ben par exemple ceci :

/*Définitions :*/
DEFINE VARIABLE nbDays    AS INTEGER   NO-UNDO.
DEFINE VARIABLE cThisDay  AS CHARACTER NO-UNDO. 

/*Requête*/
FOR EACH Order                                  /*Order = une table dans la DB courante */
    WHERE Order.ShipDate > 01/01/1995            /*Where clause du style SQL*/
    NO-LOCK:         
                                   /*Pas de verouillage de la table*/   
    RUN calcDays(INPUT Order.ShipDate , OUTPUT  nbDays, OUTPUT cThisDay). /*Appel à la procedure*/

    DISPLAY "Commande du " Order.ShipDate " faite il y a " nbDays " depuis aujourd'hui "  cThisDay. /*Affichage des valeurs retournées par la procédure*/

END. /*Fin de la requête FOR EACH */


PROCEDURE calcDays: /*Procedure = idem qu'en ADA par exemple */
/* Calcul le nombre de jour depuyis la date de la commande et met la date d'aujourd'hui au forma JJ/MM/AA */ 
    DEFINE INPUT  PARAMETER firstDate  AS DATE        NO-UNDO.
    DEFINE OUTPUT PARAMETER piDays   AS INTEGER       NO-UNDO.
    DEFINE OUTPUT PARAMETER cToday AS CHARACTER       NO-UNDO.

    piDays =  TODAY - firstDate .
    cToday = STRING(DAY(TODAY)) + "/" + STRING(MONTH(TODAY)) + "/" + STRING(YEAR(TODAY)).
END PROCEDURE.

En gros ce qu'on fait : pour chaque record de la table "Order", on appel une procédure ("calcDays) qui calcul le nombre de jour passés depuis cette commande et affiche la date d'aujourd'hui au format JJ/MM/AA


Avec l'iNukes, atomisez une pomme.

Hors ligne

#14 Le 08/08/2012, à 21:20

Haleth

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

A mon avis, tu trouveras pas beaucoup de langages de ce type, parcque ca n'apporte pas de flexibilité ou autre
En gros, y'a aucun intéret, à mes yeux profanes


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#15 Le 10/08/2012, à 17:12

basquer

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Il existe un framework Ada qui réunit les 3 couches :
http://blog.vacs.fr/index.php?post/2012 … monstrator

AdaCore propose également des packages qui masquent les instructions SQL GnatColl:
http://libre.adacore.com/adaanswers/gem … api-part-1

Hors ligne

#16 Le 11/08/2012, à 09:39

Mathieu147

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

basquer a écrit :

Il existe un framework Ada qui réunit les 3 couches :
http://blog.vacs.fr/index.php?post/2012 … monstrator

AdaCore propose également des packages qui masquent les instructions SQL GnatColl:
http://libre.adacore.com/adaanswers/gem … api-part-1

L'article que tu donnes illustre quelques problèmes qu'il y a avec le fait d'envoyer des requêtes SQL sous forme de texte, mais ensuite il me semble que GnatColl soit simplement un ORM classique, non?


Pffff…

Hors ligne

#17 Le 11/08/2012, à 16:13

Haleth

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Mouais, m'enfin n'importe qui fait des fonctions d'abstractions ..


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#18 Le 18/08/2012, à 10:45

STR_Locke

Re : [RÉSOLU] _ [3-tiers]1 seul langage sur les trois couches ?

Bon je marque le sujet comme résolu ^^

J'ai eu ma réponse : utilisation des ORMs.

Ça correspond au besoin que je pourrais avoir.

Merci à tous smile


Avec l'iNukes, atomisez une pomme.

Hors ligne