HyperDurable هي فئة أساسية للكائنات المعمرة لتمكين الوصول الطبيعي الشبيه بالكائن إلى التخزين الثابت الأساسي من جذور الكائنات المعمرة. يقوم HyperDurable بتجريد واجهة برمجة التطبيقات لجلب الكائنات بشكل كامل، مما يعمل على تحسين إمكانية قراءة التعليمات البرمجية في طبقات منطق الأعمال.
مع الغزل:
yarn add @ticketbridge/hyper-durable
مع NPM:
npm i @ticketbridge/hyper-durable
اكتب فئة الكائن المتين الخاصة بك عن طريق توسيع الفئة الأساسية HyperDurable
. في المُنشئ، قم بتمرير state
و env
إلى HyperDurable
عبر super()
. سيقوم HyperDurable
بتحميل جميع البيانات التي تم الاحتفاظ بها سابقًا في الذاكرة داخل fetch
، لذلك سيتم تجاوز أي خصائص قمت بتعيينها في المُنشئ بعد استدعاء super()
بواسطة أي بيانات تم حفظها مسبقًا.
داخل كائنك المتين، يمكنك الوصول إلى الخصائص والأساليب الموجودة في الذاكرة باستخدام this
. لا داعي للقلق بشأن استمرارية البيانات - فالبيانات القذرة تستمر في نهاية كل طلب جلب.
// RubberDuck.js
import { HyperDurable } from '@ticketbridge/hyper-durable' ;
export class RubberDuck extends HyperDurable {
constructor ( state , env ) {
// Pass state and env to HyperDurable
super ( state , env ) ;
// Anything set here will be overriden by previously persisted data, if any exists
// Therefore, you can safely set default values here
this . name = 'New Duck' ;
this . favoriteFoods = [ ] ;
}
addFavoriteFood ( food ) {
this . favoriteFoods . push ( food ) ;
}
sayHello ( ) {
return `Hello world, my name is ${ this . name } , and I have ${ this . favoriteFoods . length } favorite foods.` ;
}
}
في العامل الخاص بك، قم أولاً بتوكيل مساحات أسماء الكائنات الدائمة باستخدام proxyHyperDurables
. لم يتغير الحصول على كعب الروتين: أنشئ معرفك بالطريقة المفضلة لديك من واجهة برمجة التطبيقات لمساحة الاسم (على سبيل المثال، newUniqueId
و idFromName
و idFromString
) ثم استخدم get
لإنشاء كعب روتين للكائن.
يجب await
كل عملية كعب روتين، نظرًا لأنهم جميعًا يستخدمون واجهة برمجة تطبيقات fetch
أسفل الغطاء. يمكن قراءة الخصائص مباشرة من كعب الروتين. يمكن تعيين الخصائص باستخدام أدوات الضبط التي تم إنشاؤها تلقائيًا (في set
التنسيق + PropName
). يمكن استدعاء الأساليب مباشرة من كعب الروتين.
// worker.js
import { proxyHyperDurables } from '@ticketbridge/hyper-durable' ;
import { RubberDuck } from './RubberDuck' ;
// Export the DO class
export { RubberDuck } ;
export default {
async fetch ( request , env ) {
// Proxy the namespace
const { RUBBERDUCK } = proxyHyperDurables ( env , {
// BINDINGNAME: DurableObjectClass
RUBBERDUCK : RubberDuck
} ) ;
// Obtain a stub
const id = RUBBERDUCK . idFromName ( 'firstDuck' ) ;
const stub = RUBBERDUCK . get ( id ) ;
// Await properties
const name = await stub . name ; // 'New Duck'
// Await setters
const newName = await stub . setName ( 'Special Duck' ) ; // 'Special Duck'
// Await methods
await Promise . all ( [
stub . addFavoriteFood ( 'herring' ) ,
stub . addFavoriteFood ( 'shrimp' )
] ) ;
const greeting = await stub . sayHello ( ) ; // 'Hello world, my name is Special Duck, and I have 2 favorite foods.'
return new Response ( greeting ) ;
}
}
استخدمها كفئة أساسية لكائنك المتين. يتضمن بعض الخصائص والأساليب بشكل افتراضي، والتي سيتم وصفها أدناه.
env: Env
مرت env
في المنشئ.
state: HyperState
تم تمرير state
في المنشئ بالإضافة إلى:
state.dirty: Set<string>
مجموعة الخصائص التي تم تغييرها في الذاكرة ولكنها لم تستمر بعد.
state.persisted: Set<string>
مجموعة من الخصائص التي تستمر في تخزين الكائنات الدائمة.
state.tempKey: string
يُستخدم لتتبع مفتاح خاصية متداخلة بشدة (على سبيل المثال، عند الوصول إلى this.favoriteFoods[0]
، يكون state.tempKey
هو favoriteFoods
).
storage: DurableObjectStorage
تخزين الكائنات الدائم، من state.storage
.
router: Router
جهاز توجيه itty للتعامل مع طلبات الجلب الواردة.
async initialize()
تهيئة التحميل إذا لم يبدأ التحميل بالفعل.
async load()
تحميل البيانات المستمرة في الذاكرة.
async persist()
استمرار الخصائص القذرة.
async destroy()
يحذف جميع البيانات الموجودة في storage
، ويمسح الحالة state.dirty
و state.persisted
، ويحذف جميع الخصائص من الذاكرة.
toObject()
إرجاع جميع البيانات المستمرة والقذرة ككائن.
async fetch(request: Request): Promise<Response>
يقوم بتهيئة الكائن (إذا لم تتم تهيئته مسبقًا)، ثم يمرر الطلب إلى router
. بعد أن يعالج router
الطلب، يستمر في الاحتفاظ بأي بيانات قذرة.
proxyHyperDurables(env: Env, doBindings: { [key: string]: DOClass })
استخدم لتوكيل مساحات أسماء الكائنات الدائمة الخاصة بك. يقبل معلمتين: env
و doBindings
. env
هو env
العامل الخاص بك حيث يتم الوصول إلى مساحات الأسماء. doBindings
هو كائن، حيث تكون المفاتيح عبارة عن أسماء ربط والقيم هي فئات الكائنات الدائمة المرتبطة بتلك الروابط. تقوم بإرجاع كائن، حيث المفاتيح هي أسماء الربط التي تم تمريرها والقيم هي HyperNamespaceProxy المرتبطة.
يُستخدم لإنشاء معرفات الكائنات والحصول على بذرة الكائنات، تمامًا كما هو الحال في واجهة برمجة تطبيقات DualObjectNamespace الأولية.
تم إنتاجه بواسطة HyperNamespaceProxy.get(id)
. يمكن الوصول إلى طريقة fetch
مباشرة، كما هو الحال في واجهة برمجة التطبيقات الأولية. يسمح كعب الروتين أيضًا بالوصول البسيط إلى الخصائص والأساليب.
للحصول على عقار، await
:
await stub . name ;
لتعيين خاصية، await
أداة الضبط التي تم إنشاؤها تلقائيًا (إرجاع القيمة الجديدة):
await stub . setName ( 'Eendje' ) ;
لاستدعاء طريقة ما، await
( ملاحظة: إذا لم يكن للطريقة قيمة إرجاع، فسوف تُرجع null
بدلاً من القيمة المعتادة undefined
):
await stub . sayHello ( ) ;
ستعيد خصائص وأساليب كعب الروتين قيمتها مباشرة في حالة النجاح. إذا فشلت العملية، فسيتم طرح HyperError
بالبنية التالية:
{
message : 'Error message' ,
details : 'Error details'
}
هذه المكتبة مستوحاة بشكل كبير من مادة itty-durable من Kevin Whitley.