Картопостроитель данных + Шаблон "наблюдатель"

Как я уже упоминал в комментариях к ответу @ wim, я думаю, что вы можете использовать инкрементальный декодер codecs.iterdecode() для этого. Поскольку это генераторная функция, нет необходимости вручную сохранять и восстанавливать ее состояние между итеративными вызовами.

Вот как это можно использовать для обработки ситуации, подобной той, которую вы описали:

import codecs
from random import randint


def reader(sequence):
    """ Yield random length chunks of sequence until exhausted. """

    plural = lambda word, n, ending='s': (word+ending) if n > 1 else word

    i = 0
    while i < len(sequence):
        size = randint(1, 4)
        chunk = sequence[i: i+size]

        hexrepr = '0x' + ''.join('%02X' % b for b in chunk)
        print('read {} {}: {}'.format(size, plural('byte', len(chunk)), hexrepr))

        yield chunk
        i += size


bytes_obj = b'\xc3\x84\xc3\x96\xc3\x9c\xc3\x84\xc3\x96\xc3\x9c'  # 'ÄÖÜÄÖÜ'

for decoded in codecs.iterdecode(reader(bytes_obj), 'utf-8'):
    print(decoded)

Пример вывода:

read 3 bytes: 0xC384C3
Ä
read 1 byte: 0x96
Ö
read 1 byte: 0xC3
read 3 bytes: 0x9CC384
ÜÄ
read 2 bytes: 0xC396
Ö
read 4 bytes: 0xC39C
Ü

7
задан Jack Sleight 4 February 2009 в 00:11
поделиться

2 ответа

Определенно походит на хорошую идею мне. То, что Вы делаете, подобно шаблону Единицы работы, предназначенному для отслеживания изменения, которые Вы внесли в отображенные объекты и фиксацию (обычно как единственная транзакция), после того как Вы сделаны.

Я полагаю, что проекты как Выход и Отдых предоставляют это Вам в PHP, а также облегчающий часть отображающейся боли, но я лично не использовал их.

Как в стороне, это кажется, что Ваши иерархии объектов могут извлечь выгоду из того, чтобы быть просматриваемым, как Агрегируется, если Вы хотите спуститься по Доменному Управляемому пути Дизайна и преимуществу от чистой изоляции, это приносит.

--

Править: также похоже, что eZ Компоненты имеют довольно полнофункциональное решение PHP ORM, и Доктрина 2.0 развивается это слишком.

--

Редактирование 2: Я не посмотрел бы на, Продвигают или креольский язык для проблемы, которую Вы обсуждаете. Креольский язык не является ORM, но больше уровня абстракции DB, сродни PDO - и проект, теперь официально "Мертво". Продвиньте использует шаблон ActiveRecord, не шаблон DataMapper, таким образом, Ваши объекты области заканчиваются с намного большей ответственностью за персистентность и AFAIK, это не включает средство Единицы работы.

3
ответ дан 7 December 2019 в 16:46
поделиться

Если Вы изучаете выезд ORM, Продвигают и креольский язык.

0
ответ дан 7 December 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: