I think that you can safely implement this in one field type. Insofar as it's doable it would be more cost effective to maintain one plugin instead of two.
Consider the standard dataformfield_url. It has two content parts, the url and alternate name. For your purpose the url content part can store the long dynamic url and the alternate name content part can store the short immutable url. After all the short url is an alternate name of sorts. In editing mode you display the long url content for editing and in browse mode you display the short url content. You don't even need two patterns for that. It is just the implementation of the display_edit and display_browse methods. On first update of the entry content you fetch and store the short url.