Итак, я нахожусь в проекте несколько месяцев, и я понимаю, что выбранные мной PK могут не соответствовать расширению, запланированному для версии 2. Я также считаю, что переход на составную PK или заменяющую PK потребует изменения кода практически для каждого часть системы.
Например, мой DAL имеет методы GetPerson (string PersonID), которые должны принимать другие типы параметров для работы. Также большинство веб-страниц принимают строки запросов со встроенными в них PK (т. Е. / GetPerson? PersonID = BILL)
Это заставило меня задуматься о том, что я бы хотел внедрить некоторую инкапсуляцию, где я защищал себя от изменений PK. Иметь абстрактные методы для размещения и чтения PK из строки запроса. Аналогично, вместо передачи собственных типов в DAL, передайте объект PersonPK и скройте реализацию.
Теоретически мне нравится идея, я просто не уверен на практике, можно предотвратить превращение этого в "дырявую абстракцию". Например, когда пришло время генерировать вызовы БД, мне нужно взломать объект PK. И все еще будут десятки утверждений, которые нужно переписать.
Итак, на мой вопрос .... Кто-нибудь успешно использует PK абстракцию в своих проектах? Это сэкономило ваше время? Каковы ключи для успешной реализации этого?
EDIT:
Некоторые из ответов подсказывают мне, что я ничего не понял.
Я никогда не предлагал создать какой-либо абстрактный столбец первичного ключа в базе данных. Я просто размышлял о том, чтобы бизнес-логика и интерфейсный код были разработаны таким образом, чтобы они были устойчивы к рефакторингу PK.