Сохраняя оператор преобразования внутри класса, вы даете автору класса контроль над тем, как он может быть преобразован (он не позволяет пользователям создавать неявных преобразований). Как разработчик, я бы счел это преимуществом, так как неявное преобразование имеет свои проблемы
. Разница заключается в том, что можно передавать один объект как другой и проходить через преобразование. функция. Первый сообщает, что объект имеет данный тип, а второй показывает новым читателям, что между этими двумя типами есть разница, и что преобразование необходимо.
Кроме того, степень детализации файловой системы: один кластер для каждого значения - это слишком много, поэтому вам нужно найти компромисс, где заканчивается файловая система и начинается файл настроек. Это, конечно, не дает вам единообразного API. Так почему бы не объединить все настройки в несколько ключевых файлов и предоставить единый API для доступа к ним? БАМ - реестр.
(И поскольку MS обычно считает API более важным, чем формат, неудивительно, что файлы непрозрачны)
[голос Раймонда Чена] Помните, он был разработан для компьютеров, где 4 МБ ОЗУ было достаточно. [/ Голос Раймонда Чена]
Он создал единую точку входа для управления конфигурацией приложения всей системы. Это был бы хороший пример использования встроенной сетевой базы данных (например, Raima, используемой Rational) или текстовой базы данных (cdb Бернштейна).
Я считаю, что они сделали это для поддержки отдельной настройки для каждого пользователя, входящего в систему. В Unix есть понятие домашнего каталога, а в Windows его нет.
Так что, когда двоичный реестр будет поврежден, вы просто сдадитесь и купите новейшую версию Windows для новой установки.
Во-первых, быстрее читать и записывать в реестр во время сеанса пользователя.
Эта проблема известна как кластеризация и является частью более крупной проблемы дедупликации (где вы можете решить, какой член кластера является " правый "один), также известный как слияние-очистка .
Однажды я прочитал несколько исследовательских работ именно по этой теме (имена приведены ниже), и в основном авторы использовали ограниченный скользящее окно размера по отсортированному списку строк. Они будут только сравнивать (используя алгоритм расстояние редактирования ) N * N строк внутри окна, тем самым снижая вычислительную сложность. Если любые две строки выглядели одинаково, они объединялись в кластер (путем вставки записи в отдельную таблицу кластеров).
За первым проходом по списку последовал второй проход , где строки были перевернуты перед сортировкой. Таким образом, строки с разными головками имели еще один шанс приблизиться достаточно близко, чтобы их можно было оценить как часть того же окна. На этом втором проходе, если строка выглядела достаточно близко к двум (или более) строкам в окне, и эти строки уже были частями своих собственных кластеров (найденных на первом проходе), тогда два кластера будут объединены (путем обновления таблицы кластеров), и текущая строка будет добавлена во вновь объединенный кластер. Этот подход к кластеризации известен как алгоритм поиска объединения .
Затем они улучшили алгоритм, заменив окно списком основных X по существу уникальных прототипов . Каждая новая строка будет сравниваться с каждым из X лучших прототипов. Если строка будет выглядеть достаточно близко к одному из прототипов, она будет добавлена в кластер прототипа . Если бы ни один из прототипов не выглядел достаточно похожим, строка стала бы новым прототипом , вытесняя самый старый прототип из верхнего списка X. (Для решения, какая из строк в кластере прототипа должна использоваться в качестве нового прототипа, представляющего весь кластер, использовалась эвристическая логика). Опять же, если бы строка выглядела похожей на несколько прототипов, все их кластеры были бы объединены.
Однажды я реализовал этот алгоритм для дедупликации записей имен / адресов с размерами списков около 10-50 миллионов записей, и он работал хорошо. чертовски быстро (и дубликаты тоже удалось найти).
В целом для таких проблем, Самая сложная часть, конечно, - найти правильное значение порога подобия . Идея состоит в том, чтобы фиксировать все дублирования без получения слишком большого количества ложных срабатываний . Данные с разными характеристиками обычно требуют разных пороговых значений. Выбор алгоритма расстояния редактирования также важен, поскольку одни алгоритмы лучше подходят для ошибок распознавания текста, в то время как другие - для опечаток, а третьи - для фонетических ошибок (например, при получении имени по телефону).
реализован алгоритм кластеризации, хороший способ проверить его - получить список уникальных выборок и искусственно изменить каждую выборку для создания ее вариаций, сохраняя при этом тот факт, что все вариации произошли от одного и того же родителя. Затем этот список перемешивается и передается в алгоритм.
Идея состоит в том, чтобы хранить все настройки для всех программ в одном месте вместо того, чтобы распространять их по всему диску.
В этой статье обсуждаются файлы INI и реестр: http://blogs.msdn.com/oldnewthing/archive/2007/11/ 26 / 6523907.aspx