Wat is een orm, hoe werkt het, en hoe moet ik er een gebruiken?

Iemand heeft gesuggereerd dat ik een orm gebruik voor een project dat ik ben ontwerpen, maar ik heb problemen met het vinden van informatie over wat het is of hoe het werkt.

Kan iemand me een korte uitleg geven van wat een orm is en hoe het werkt en hoe ik moet beginnen met het gebruik van een?


Antwoord 1, Autoriteit 100%

Inleiding

object-relationele mapping (OM) is een techniek waarmee u kunt vragen en manipuleren Gegevens uit een database met behulp van een object-georiënteerd paradigma. Bij het praten over ORM, verwijzen de meeste mensen naar een -bibliotheek die de object-relationele mapping-techniek implementeert, vandaar de uitdrukking “een orm”.

Een ORM-bibliotheek is een volledig gewone bibliotheek geschreven in uw taaltaal die de code inkapselt die nodig is om de gegevens te manipuleren, zodat u SQL niet meer gebruikt; U communiceert rechtstreeks met een object in dezelfde taal die u gebruikt.

Hier is bijvoorbeeld een volledig denkbeeldige behuizing met een pseudo-taal:

U hebt een boekenklasse, u wilt alle boeken ophalen waarvan de auteur “Linus” is. Handmatig, je zou zoiets doen:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

Met een ORM-bibliotheek, zou het er als volgt uitzien:

book_list = BookTable.query(author="Linus");

Het mechanische deel wordt automatisch verzorgd via de ORM-bibliotheek.

Voor- en nadelen

Het gebruik van ORM bespaart veel tijd omdat:

  • DRY: u schrijft uw gegevensmodel op slechts één plaats en het is gemakkelijker om update, onderhoud en hergebruik de code.
  • Veel dingen worden automatisch gedaan, van databaseverwerking tot I18N.
  • Het dwingt je om MVCte schrijven code, wat je code uiteindelijk een beetje schoner maakt.
  • Je hoeft geen slecht gevormde SQL te schrijven (de meeste webprogrammeurs zijn er echt slecht in, omdat SQL wordt behandeld als een “sub”-taal, terwijl het in werkelijkheid een zeer krachtige en complexe taal is).
  • Ontsmetten; het gebruik van voorbereide afschriften of transacties is net zo eenvoudig als het aanroepen van een methode.

Het gebruik van een ORM-bibliotheek is flexibeler omdat:

  • Het past in je natuurlijke manier van coderen (het is jouw taal!).
  • Het abstraheert het DB-systeem, dus je kunt het veranderen wanneer je maar wilt.
  • Het model is zwak gebonden aan de rest van de applicatie, dus je kunt het wijzigen of ergens anders gebruiken.
  • Hiermee kun je OOP-goedheid zoals gegevensovererving zonder hoofdpijn gebruiken.

Maar ORM kan lastig zijn:

  • Je moet het leren, en ORM-bibliotheken zijn geen lichtgewicht tools;
  • Je moet het instellen. Zelfde probleem.
  • Prestaties zijn OK voor gewone zoekopdrachten, maar een SQL-master zal het altijd beter doen met zijn eigen SQL voor grote projecten.
  • Het abstraheert de DB. Hoewel het oké is als je weet wat er achter de schermen gebeurt, is het een valkuil voor nieuwe programmeurs die zeer gulzige uitspraken kunnen schrijven, zoals een zware treffer in een for-lus.

Hoe leer je over ORM?

Nou, gebruik een. Welke ORM bibliotheek u ook kiest, ze gebruiken allemaal dezelfde principes. Er zijn een heleboel van ORM bibliotheken hier in de buurt:

Als u wilt proberen een ORM bibliotheek in Web programmering, zou je beter af zijn met behulp van een hele framework stack als:

  • Symfony (PHP, met behulp van Propel of Doctrine).
  • Django (Python, met behulp van een interne ORM).

Probeer niet om uw eigen ORM te schrijven, tenzij u probeert om iets te leren. Dit is een gigantisch stuk van het werk, en de oude nam veel tijd en werk voor ze betrouwbaar geworden.


Antwoord 2, Autoriteit 10%

Kan iemand mij een korte toelichting …

Natuurlijk.

ORM staat voor “Object aan relational mapping” waarbij

  • Object deel is degene die u met uw programmeertaal (python in dit geval)

  • Het Relationeledeel is een relationeel databasebeheersysteem (een database dus) er zijn andere soorten databases, maar de meest populaire is relationeel (u kent tabellen, kolommen, pk fk enz. bijv. Oracle MySQL, MS-SQL)

  • En tot slot het gedeelte Mappingis waar je een brug slaat tussen je objecten en je tabellen.

In toepassingen waar u geen ORM-framework gebruikt, doet u dit met de hand. Door een ORM-framework te gebruiken, kunt u de boilerplate die nodig is om de oplossing te creëren, verminderen.

Dus laten we zeggen dat je dit object hebt.

class Employee:
      def __init__( self, name ): 
          self.__name = name
       def getName( self ):
           return self.__name
       #etc.

en de tafel

  create table employee(
          name varcar(10),
          -- etc  
    )

Als je een ORM-framework gebruikt, kun je dat object automatisch toewijzen aan een db-record en zoiets schrijven als:

  emp = Employee("Ryan")
   orm.save( emp )

En laat de werknemer invoegen in de DB.

Oeps, het was niet zo kort, maar ik hoop dat het eenvoudig genoeg is om andere artikelen die je leest op te vangen.


Antwoord 3, autoriteit 4%

Een ORM (Object Relational Mapper) is een stuk/laag software waarmee u uw code-objecten aan uw database kunt koppelen.

Sommige behandelen meer aspecten dan andere… maar het doel is om een deel van het gewicht van de gegevenslaag van de schouders van de ontwikkelaar te halen.

Hier is een korte clip van Martin Fowler (Data Mapper):

Patronen van Enterprise Application Architecture Data Mappers


Antwoord 4

Zoals alle acroniemen is het dubbelzinnig, maar ik neem aan dat ze object-relationele mapperbedoelen — een manier om je ogen te bedekken en te doen geloven dat er geen SQL onder zit, maar het zijn allemaal objecten ;-). Niet echt waar natuurlijk, en niet zonder problemen — de altijd kleurrijke Jeff Atwood heeft ORM beschreven als het Vietnam van CS;-). Maar als je weinig of geen SQL kent en een vrij eenvoudig / kleinschalig probleem hebt, kunnen ze je tijd besparen!-)


Antwoord 5

Objectmodel houdt zich bezig met de volgende drie concepten:
Data abstractie
inkapseling
Erfenis
Het relationele model gebruikte het basisconcept van een relatie of tabel.
Object-relationele mapping (OR-mapping) producten integreren de mogelijkheden van objectprogrammeertaal met relationele databases.

Other episodes