Я думаю, что это не возможно. Необходимо будет распределить.NET FW также. Если Вы хотите скомпилировать приложение.NET в собственный код, используйте инструмент NGen
Обычно я добавляю «DTO» в конец имени класса, а также помещаю все DTO в их собственный пакет. В вашем примере я бы назвал его com.x.core.dto.CarDTO.
Добавление DTO или DAO или чего-либо еще нарушает DRY. FQN - это прекрасно, особенно если они действительно одно и то же.
Я не думаю, что есть лучшая практика или соглашение для класса, демонстрирующего такое поведение. Мне лично не нравится слово «объект» в именах классов. Вы можете использовать квалификацию, например Poko.Car, или соглашение об именах, например Автомобиль (для POJO) CarDa (для доступа к данным) CarBiz (для бизнес-класса)
Или, если вы не возражаете против слова «объект» в имени класса, выберите что-то вроде CarDto (объект передачи данных автомобиля)
Используйте соглашение, которое подходит для других соглашений кода, которые вы используете. Я лично использую суффикс «TO» (например, объект передачи данных, связанный с классом домена Customer, называется CustomerTO). Также структура пакета должна отражать намерение каждого типа класса (so.foo.domain.Customer и so.foo.transport.CustomerTO)